2012-06-21 14 views
8

¿Cuál es una buena manera de obtener el texto de un elemento jQuery cuando el texto mismo es adyacente a otro elemento que contiene texto?¿Cómo accedo al texto dentro de un elemento mientras ignoro un texto dentro de una etiqueta adyacente al texto?

En este ejemplo, quiero conseguir en el texto: 'Texto Quiero' sin tener en cuenta el texto en el elemento secundario adyacente:

<span> 
    <a>Text I want to ignore</a> 
    Text I want 
</span> 

Mi solución era conseguir que todo el texto de la etiqueta <span> y luego borre todo el texto en la etiqueta <a>. Esto se siente un poco incómodo por lo que estoy preguntando si hay una manera mejor:

var all_the_text = $('span').text(); 
var the_text_i_dont_want = $('span').find('a').text(); 
var text_i_want = all_the_text.replace(the_text_i_dont_want, ''); 
+0

Posible duplicado de [jQuery: usando .text() para recuperar sólo texto no anidado en etiquetas hijo] (http://stackoverflow.com/questions/3442394/jquery-using-text-to-retrieve -only-text-not-nested-in-child-tags) –

Respuesta

7

Tienes que ir a los nodos de texto para esto:

var text_i_want = $("span").contents().filter(function(){ 
    return this.nodeType === 3; 
}).text();​ 

http://jsfiddle.net/UeBZq/

+2

Siempre me olvido de que los nodos de texto '' nodeType === 3', muy bien hecho. Puede agregar que si OP desea recortar los saltos de línea y el espaciado adicional antes/después del texto que desea, puede usar ['$ .trim'] (http://api.jquery.com/jQuery.trim/) - [ violín] (http://jsfiddle.net/ult_combo/UeBZq/2/). –

+1

¡Esto es impresionante! Solo para tu información: si puedes garantizar que el nodo de texto siempre será el primer elemento (antes de cualquier olmo infantil) ... puedes simplemente hacer referencia directamente sin la necesidad de filtrar así: '' var text_i_want = $ ("span") .contents() [0] '' .. O puede usar '' .first() '' si desea seguir encadenando los métodos de jQuery. –

2

eliminar una etiqueta y obtener el contenido del tramo. Working Demo

<span> 
    <a>Text I want to ignore</a> 
    Text I want 
</span>​ 

var all_the_text = $('span').find('a').remove(); 
alert($('span').text()); 
+0

¿Por qué 'JSON.stringify'? podrías usar '$ ('span'). text()'. –

+0

No me importa refactorizar esto tan pronto como funcionó :) Lo limpié ahora! –

Cuestiones relacionadas