Comment obtenir du texte autour d’un élément?

Si j’ai

Title Body text.

Comment puis-je récupérer le “Corps du texte” sans récupérer le texte à l’intérieur de la balise legend?

Par exemple, si je voulais voir si le texte à l’intérieur du champs contient le mot “body” et le changer, en ignorant tout ce qui pourrait être dans la légende? innerHTML récupère tout le texte de tous les nœuds enfants.

L’utilisation de jQuery ne serait pas un problème.

 $("#fldset").contents().eq(2).text(); 

Sans bibliothèque –

 var fldset = document.getElementById("fldset"), txt = fldset.lastChild.textContent || fldset.lastChild.innerText; alert(txt); 

Cela obtiendra tous les nœuds de texte de fldset laissant de côté tout autre élément et son contenu:

 var fldsetContent = $('#fldset').contents(); var text = ''; $(fldsetContent).each( function(index, item) { if( item.nodeType == 3 ) text += $.sortingm($(item).text()); }); alert( text ); 

Exemple en direct

 $('#fldset').clone().find('legend').remove().end().text() 

Mais vous devriez aussi chercher autour du SO

  • Utilisation de .text () pour récupérer uniquement le texte non nested dans les balises enfant
  • Clipsez le contenu avec jQuery

Je ne peux pas penser à autre chose qu’à

 $("#result").html($("#wrapper").text().replace($("legend").text(),"")); 

mais il devrait y avoir un moyen plus élégant . Vous pouvez également créer un nouvel élément en tant que copie de celui-ci, supprimer tous les enfants et obtenir du texte. Hmm … Ce serait :

 var newElement = $("#fldset").clone(); newElement.children().remove(); $("#result").html(newElement.text()); 

Ainsi, peu importe le nombre et le type de nœuds enfants, cela fonctionnerait. Ici: http://www.jsfiddle.net/wFV4c/

Pour transformer tous les nœuds de texte en clair à l’intérieur du champ défini en rouge:

 jQuery.each($('#fldset').contents(),function(index,value){ if(value.textContent == value.nodeValue){ $(this).wrap('') } });