2010-07-03 2 views
13

J'ai une légère préférence pour résoudre ce problème en JS pur, mais si la version de jQuery est plus simple, alors jQuery est bien aussi. En effet, la situation est comme çaObtention du contenu d'un élément SANS ses enfants

<span id="thisone"> 
The info I want 
<span id="notthisone"> 
    I don't want any of this nonsense 
</span> 
</span> 

Je veux effectivement obtenir
The info I want
mais pas
The info I want I don't want any of this nonsense
et je ne veux surtout pas
The info I want <span id="notthisone"> I don't want any of this nonsense </span>
qui est malheureusement ce que je reçois à droite maintenant ...

Comment est-ce que je ferais ceci?

Répondre

27

Avec js seulement:

Essayes:http://jsfiddle.net/g4tRn/

var result = document.getElementById('thisone').firstChild.nodeValue;  

​alert(result);​ 

Avec jQuery:

Essayez-:http://jsfiddle.net/g4tRn/1

var result = $('#thisone').contents().first().text(); 

alert(result);​ 

Bonus:

S'il y a d'autres nœuds de texte dans la <span> externe que vous voulez obtenir, vous pouvez faire quelque chose comme ceci:

Essayez-:http://jsfiddle.net/g4tRn/4

var nodes = document.getElementById('thisone').childNodes; 
var result = ''; 

for(var i = 0; i < nodes.length; i++) { 
    if(nodes[i].nodeType == 3) {  // If it is a text node, 
     result += nodes[i].nodeValue; // add its text to the result 
    } 
} 

alert(result); 
​ 
+0

@richardtallent - Tu veux dire comme un hybride? C'est vrai. Un peu moins de code de cette façon. http://jsfiddle.net/g4tRn/2/ – user113716

1

Avez-vous essayé quelque chose comme ça?

var thisone = $("#thisone").clone(); 
thisone.children().remove(); 
var mytext = thisone.html(); 
+0

'.text()' à la fin, sûrement? – bobince

3

Si vous voulez juste le premier enfant, alors c'est plutôt simple. Si vous recherchez le premier élément textuel, ce code devra être modifié.

var text = document.getElementById('thisone').firstChild.nodeValue; 
alert(text); 
Questions connexes