Je veux obtenir le innerText de
sans le
innerText
à l'intérieur de la plage ... voici le HTML de la page:
<div class="col-md-12 header"> <div class="col-md-8 info-header"> <h1> This note is for h1 tag!!!!!! <span> this note is insidespan v226hql!!! </span> </h1> </div> </div>
var title = document.querySelector('div.col-md-8.info-header h1'); title = title && title.innerText; console.log(title);
mais cela renverra le innerText
des deux
et
.
que puis-je faire?
3 Réponses :
Une fois que vous avez sélectionné le parent, vous devrez sélectionner son nœud de texte enfant et obtenir le contenu de ce nœud:
<div class="col-md-12 header"> <div class="col-md-8 info-header"> <h1> This note is for h1 tag!!!!!! <span> this note is insidespan v226hql!!! </span> </h1> </div> </div>
const h1 = document.querySelector('div.col-md-8.info-header h1'); const text = h1.childNodes[0].textContent; console.log(text);
Malheureusement, il n'y a aucun moyen de naviguer directement vers un nœud de texte avec une chaîne de requête, vous devez donc d'abord passer par les childNodes
. p >
Cela ne contiendra-t-il pas le contenu de span interne qu'ils veulent éviter?
Non, vous pouvez appuyer sur Exécuter l'extrait de code pour le voir en action - il en résulte uniquement Cette note est pour la balise h1 !!!!!!
, comme vous pouvez le voir dans la console de sortie d'extrait de code. childNodes [0]
sélectionne le premier nœud enfant du parent, et le premier nœud enfant est le nœud de texte dont OP veut obtenir le contenu.
Il n'obtiendra pas tout le texte, si h1
a du texte après span
el, il ne l'inclura pas.
Je t'ai eu. Je suis sur mobile. Cela fonctionne pour ce cas spécifique. J'avais pensé en termes généraux. Merci d'avoir expliqué.
Essayez ceci.
var mainElement = document.getElementById("id_of_h1"), innerElements = mainElement.firstChild, innerTexts = []; while (innerElements) { if (innerElements.nodeType == 3) { innerTexts.push(innerElements.data); } innerElements = innerElements.nextSibling; } var finalResult = innerTexts.join("");
finaresult contiendra uniquement l'intertexte de l'élément supérieur.
Si vous avez
et avez besoin d'obtenir tout le texte sauf les éléments html - bonjour un autre monde
bonjour le monde
pas bonjour un autre monde
, alors vous devez procéder de cette façon
<div class="col-md-12 header"> <div class="col-md-8 info-header"> <h1> This note is for h1 tag!!!!!! <span> this note is insidespan v226hql!!! </span> extra text without tag </h1> </div> </div>
const h1 = document.querySelector('div.col-md-8.info-header h1'); const el = h1.childNodes; let result = ""; for(i=0;i<el.length;i++){ if(el[i].nodeName == '#text'){ result+=el[i].textContent; } } console.log(result);