2010-07-03 22 views
13

Mam łagodne preferencje w rozwiązywaniu tego w czystym JS, ale jeśli wersja jQuery jest prostsza, to jQuery też jest w porządku. Skutecznie sytuacja jest jak tenUzyskiwanie zawartości elementu BEZ jego dzieci

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

I faktycznie chcesz dostać
The info I want
ale nie
The info I want I don't want any of this nonsense
a ja szczególnie nie chce
The info I want <span id="notthisone"> I don't want any of this nonsense </span>
który jest niestety to, co otrzymuję prawo teraz ...

Jak to zrobić?

Odpowiedz

27

Z tylko JS:

go wypróbować:http://jsfiddle.net/g4tRn/

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

​alert(result);​ 

z jQuery:

Wypróbuj:http://jsfiddle.net/g4tRn/1

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

alert(result);​ 

Bonus:

Jeśli istnieją inne węzły tekstowe w zewnętrznej <span> który chcesz uzyskać, można zrobić coś takiego:

go wypróbować: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 - To znaczy, jak hybryda? To prawda. Trochę mniej kodu w ten sposób. http://jsfiddle.net/g4tRn/2/ – user113716

1

Próbowałeś czegoś takiego?

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

'.text()' na końcu, na pewno? – bobince

3

Jeśli chcesz tylko pierwsze dziecko, to jest dość proste. Jeśli szukasz pierwszego elementu tekstowego, ten kod będzie wymagał pewnych modyfikacji.

var text = document.getElementById('thisone').firstChild.nodeValue; 
alert(text); 
Powiązane problemy