2010-07-03 13 views
13

Tengo una preferencia leve para resolver esto en JS puro, pero si la versión de jQuery es más simple, entonces jQuery también está bien. Efectivamente la situación es asíObtener el contenido de un elemento SIN sus hijos

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

que efectivamente quiero llegar
The info I want
pero no
The info I want I don't want any of this nonsense
y yo especialmente no quiero
The info I want <span id="notthisone"> I don't want any of this nonsense </span>
que por desgracia lo que yo estoy haciendo la derecha ahora ...

¿Cómo haré esto?

Respuesta

27

Con sólo JS:

Pruébelo:http://jsfiddle.net/g4tRn/

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

​alert(result);​ 

con jQuery:

Pruébalo:http://jsfiddle.net/g4tRn/1

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

alert(result);​ 

Bono:

Si hay otros nodos de texto en el <span> exterior que desea obtener, se puede hacer algo como esto:

Pruébelo: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 - ¿Quieres decir como un híbrido? Es verdad. Un poco menos de código de esa manera. http://jsfiddle.net/g4tRn/2/ – user113716

1

¿Has intentado algo como ésto?

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

'.text()' al final, ¿no? – bobince

3

Si solo quiere el primer hijo, entonces es bastante simple. Si está buscando el primer elemento de solo texto, este código necesitará algunas modificaciones.

var text = document.getElementById('thisone').firstChild.nodeValue; 
alert(text); 
Cuestiones relacionadas