2011-12-24 9 views
21

que tengo un archivo HTML:jQuery: Cómo obtener sólo texto directa y sin etiquetas (en HTML)

<strong>1)</strong>TEXT THAT I ONLY NEED<p>some par</p><ul>..</ul> 

sólo necesito "texto que sólo NECESITO" que no se withing ninguna etiqueta en su HTML, ¿cómo puedo obtenerlo con jQuery?

Gracias.

+2

su [tasa de respuesta] (http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work) es bastante baja, usted debe buscar para marcar las respuestas en las preguntas que He preguntado (incluso si eso significa marcar su * propia * respuesta). – isNaN1247

+1

posible duplicado de [jQuery: utilizando .text() para recuperar solo texto no anidado en etiquetas secundarias] (http://stackoverflow.com/questions/3442394/jquery-using-text-to-retrieve-only-text-not -nested-in-child-tags) – 4imble

Respuesta

2

bien, si se utiliza jQuery, que haría

$('.selector').text(); 

more info and examples here

edición: acabo de ver desea que el texto que no está en ninguna etiqueta - así que esto no es directamente posible (de hecho es decir, que cada texto dentro de un documento html está dentro de algunas etiquetas HTML.)

En este caso, trataría de cambiar el marcado (la manera más fácil), por lo que el texto deseado está dentro de las etiquetas html. Si esto no es posible, utiliza el método text() mencionado anteriormente para obtener el texto completo del elemento principal y después de restar las piezas que no desea.

ver http://jsfiddle.net/3SSAR/1/ para un ejemplo de cómo restar las cuerdas ..

Recuerde utilizar substr y no - restar cadenas en Javascript

+3

Esto devolvería "1) TEXTO DE QUE SOLO NECESITO un par". http://jsfiddle.net/3SSAR/ –

+0

Devolverá todo el texto combinado en todas las etiquetas anidadas – WHITECOLOR

+0

sí, ver mi edición – tmaximini

-1

su margen de beneficio no es el mejor para esto. Si envuelto el texto que desea con una envergadura tales como:

<span class="gettext">TEXT THAT I NEED</span> 

Usted podría utilizar $('.gettext').text(); en jQuery.

+0

No es mi marcado Necesito analizarlo – WHITECOLOR

+0

Lo siento, no me había dado cuenta de que no podía cambiarlo. En ese caso sugeriría algo como la respuesta editada de frank blizzard sobre – isNaN1247

2

Esto es complicado, porque el texto está en un nodo de texto, y jQuery no admite nodos de texto, solo elementos. También porque diferentes navegadores tratan el espacio en blanco en el código HTML de manera diferente, por lo que terminas con diferentes conjuntos de nodos en diferentes navegadores. No puede obtener los nodos y confiar en que el nodo de texto que desea está en el mismo índice todo el tiempo.

Puede usar jQuery para localizar un elemento y usar el DOM para obtener todos los nodos.

Ejemplo HTML:

<div id="test"> 
    <strong>1)</strong> 
    TEXT THAT I ONLY NEED 
    <p>some par</p> 
    <ul> 
    <li>asdf</li> 
    <li>qwerty</li> 
    </ul> 
</div> 

Uso de jQuery para encontrar el div, utilice [0] para obtener el elemento DOM fuera del objeto jQuery, y la propiedad childNodes para conseguir sus hijos:

var nodes = $('#test')[0].childNodes; 

Luego puede usar jQuery para recorrer los nodos para encontrar el nodo que es el elemento strong:

var index; 
$.each(nodes, function(i,e){ 
    if (e.tagName == 'STRONG') { 
    index = i; 
    return false; 
    } 
}); 

Ahora puede utilizar el DOM para obtener el valor de texto desde el nodo siguiente:

var text = nodes[index + 1].nodeValue; 
+0

Gracias, que cod: .clone(). Children ("strong, p, ul"). Remove(). End(). Text() hizo lo que yo Necesito – WHITECOLOR

+0

@WHITECOLOR: Ese código concatenará todos los nodos de texto en el elemento, por lo que depende de que no tenga más texto o cualquier salto de línea entre los elementos secundarios. – Guffa

1

Este código funciona para mí:

var el = $("<div/>"); 
el.html(text).children().remove(); 
return el.text(); 
26

La mejor forma de hacerlo es .clone() su objeto, .remove() todo de su .children(), luego regrese al objeto usando .end() y finalmente obtenga el .text().

El método se describe en this blog post.

$("strong") 
     .clone() //clone the element 
     .children() //select all the children 
     .remove() //remove all the children 
     .end() //again go back to selected element 
     .text(); //get the text of element 
Cuestiones relacionadas