6
votes

Fusionner Direct HTML frères et sœurs en un en jQuery

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>


6 commentaires

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 plus texte dans ce texte plus texte . En fait c'est une très bonne question.


@Patrickevans non Il n'y a pas texte Plus de texte a été combiné à partir de texte plus texte .


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 ... :-)


3 Réponses :


2
votes

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());


1 commentaires

Cela détruira bien sûr tous les attributs des éléments qui arrivent après le premier élément d'un ensemble.



1
votes
$('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/

0 commentaires

4
votes

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: xxx

démo ici


1 commentaires

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! ;)