2 votes

Envelopper le contenu textuel d'une balise dans une autre balise en javascript

J'ai la structure html suivante :

<span>foobar</span>

Je voudrais envelopper le contenu du texte de ce span dans une autre balise comme celle-ci en utilisant du pur javascript :

<span><p>foobar</p></span>

J'ai déjà essayé mais sans succès :

span.appendChild(virtualDoc.createElement('p'));

Merci de me lire !

2voto

Roko C. Buljan Points 46488

Utilisez Element.childNodes y .append()

// DOM utility functions:

const el = (sel, par) => (par || document).querySelector(sel);
const elNew = (tag, prop) => Object.assign(document.createElement(tag), prop);

// Task: Wrap and re-append:

const elTarget = el("div");  // Demo only. Use a better, unique selector instead
const elParagr = elNew("p"); // Create the Paragraph

elParagr.append(...elTarget.childNodes); // Append childNodes to Paragraph
elTarget.append(elParagr); // Insert all back into the target element

div {border: 2px solid red;}
p {border: 2px solid blue;}

<!-- P inside SPAN is invalid HTML markup, use a DIV instead! -->
<div>foobar <b>baz</b></div>

-1voto

Nique Joe Points 193

Bonjour, vous pouvez facilement faire cela en ayant une fonction qui va d'abord sauvegarder le contenu précédent avant d'ajouter l'élément P. Veuillez vérifier le code ci-dessous :

<span id="span">foobar</span>
<input type="button" value="add element" onclick="addElem()">

function addElem(){

  content = document.getElementById("span").innerHTML;
    document.getElementById("span").innerHTML = "<p>"+ content +"</p>";

}

Violon : https://jsfiddle.net/p2czo5qe/

-1voto

Maik Lowrey Points 106

Vous pouvez archiver ceci très facilement en utilisant la fonction Javascript innerHTML . Comme ça :

Note Vous êtes vraiment sûr de vouloir insérer des balises p à l'intérieur d'une balise span ?

function addElem() {
  spans = document.querySelectorAll('div span');
  container = document.querySelector('div');
  nc = '';
  spans.forEach(s => {
    c = s.innerHTML;    
    nc = nc + `<p>${c}</p>`;        
  });
  container.innerHTML = '<span>' + nc + '</span>';
}

span {
  color: red;
}
span p {
  color: green;
}

<div>
  <span>foobar</span>
  <span>baz</span>
</div>
<input type="button" value="add element" onclick="addElem()">

Structure de sortie

<span>
  <p>foobar</p>
  <p>baz</p>
</span>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X