J'ai besoin de fusionner des frères et sœurs directs HTML dans un seul code de page, y compris des nœuds de texte.
<div>some text <b>some text</b> some text <b>text more text</b> some text</div>
3 Réponses :
Si j'ai bien compris votre question correctement, vous vouliez combiner des éléments qui sont côte à côte du même type.
var $div = $("div"); console.log($div.html()); $div.contents().each(function(){ if (this.nodeType == 3) { this.nodeValue = this.nodeValue.replace(/\n/g,""); return; } if (this.nodeType != 1) return; while (this.nextSibling && this.nextSibling.tagName == this.tagName) { this.innerHTML = (this.innerHTML + this.nextSibling.innerHTML).replace(/\n/g,""); this.parentNode.removeChild(this.nextSibling); } }); console.log($div.html());
Cela détruira bien sûr tous les attributs des éléments qui arrivent après le premier élément d'un ensemble.
$('div').html(function(_, oldHTML) { return oldHTML.replace(/\n/g, ''); }).children().filter(function () { return this.nextSibling && this.nextSibling.nodeName === this.nodeName; }).text(function (_, oldText) { return oldText + this.parentNode.removeChild(this.nextSibling).textContent; }); http://jsfiddle.net/tVZJV/
Vous devez itérer sur des nœuds d'enfants un par un; comparer des nœuds avec un précédent et combiner si nécessaire. Cela peut être aussi compliqué que vous le souhaitez; Mais voici un départ: démo ici p > p>
Génial! Merci beaucoup! J'ai ajouté ceci.innerhtml = this.innerhtml.replace (/ \ r? \ N / g, ""); À la fin, de nouvelles ruptures de ligne sont également dissociées. Mon héros! ;)
Donc, essentiellement, tout ce que vous voulez faire est de vous débarrasser des chevrefeaux?
Je pense que ce qu'il veut, c'est d'activer ce
texte b> plus texte b> code> dans ce
texte plus texte b> code>. En fait c'est une très bonne question.
@Patrickevans non Il n'y a pas
texte Plus de texte B> code> a été combiné à partir de
texte b> plus texte b> code> .
Pourquoi on ne peut pas utiliser la fonction remplacer !!
Je pense qu'il veut combiner des éléments que si elles sont les mêmes. Cependant, je ne sais pas pourquoi tu voudrais déranger
@Afromanj merci ... :-)