2011-12-24 16 views
21

Ho un HTML:jQuery: come ottenere solo testo diretto senza tag (in HTML)

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

ho bisogno solo "testo che ho solo bisogno di" che non è entro i tag in il suo HTML, come posso ottenerlo con jQuery?

Grazie.

+2

tuo [tasso di risposta] (http://meta.stackexchange.com/questions/16721/how-does-accept-rate-work) è piuttosto bassa, si dovrebbe cercare di segnare le risposte sulle domande che ho chiesto (anche se questo significa contrassegnare la * propria * risposta). – isNaN1247

+1

possibile duplicato di [jQuery: using .text() per recuperare solo testo non annidato nei tag figlio] (http://stackoverflow.com/questions/3442394/jquery-using-text-to-retrieve-only-text-not -nested-in-child-tags) – 4imble

risposta

2

bene, se si utilizza jQuery, si farebbe

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

more info and examples here

edit: Ho appena visto si desidera che il testo che non è in alcun tag - beh questo non è direttamente possibile (infatti è che ogni testo all'interno di un documento html si trova all'interno di alcuni tag HTML.)

In questo caso proverei a cambiare il markup (modo più semplice), quindi il testo desiderato è all'interno dei tag html. Se ciò non è possibile, si utilizza il metodo text() sopra menzionato per ottenere l'intero testo dall'elemento padre e dopo aver sottratto i pezzi che non si desidera.

vedono http://jsfiddle.net/3SSAR/1/ per un esempio di come per sottrarre le corde ..

ricordare solo per usare substr e non - sottrarre stringhe in javascript

+3

Ciò restituirebbe "1) TESTO CHE HO BISOGNO SOLO di par". http://jsfiddle.net/3SSAR/ –

+0

Restituirà tutto il testo combinato in tutti i tag nidificati – WHITECOLOR

+0

sì, vedere la mia modifica – tmaximini

-1

tuo markup non è il massimo per questo. Se avvolto il testo che si desidera con un arco come ad esempio:

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

Si potrebbe utilizzare $('.gettext').text(); in jQuery.

+0

Non è il mio markup Ho bisogno di analizzarlo – WHITECOLOR

+0

Scusa se non mi ero reso conto che non potevi cambiarlo. Nel qual caso suggerirei qualcosa come la risposta modificata di blizzard sopra – isNaN1247

2

Questo è difficile, perché il testo è in un nodo di testo e jQuery non supporta i nodi di testo, solo gli elementi. Anche perché i diversi browser trattano lo spazio bianco nel codice HTML in modo diverso, così si finisce con diversi gruppi di nodi in diversi browser. Non puoi semplicemente ottenere i nodi e fare affidamento sul fatto che il nodo di testo che desideri sia sempre nello stesso indice.

È possibile utilizzare jQuery per individuare un elemento e utilizzare il DOM per ottenere tutti i nodi al suo interno.

Esempio 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> 

utilizzare jQuery per trovare il div, utilizzare [0] per ottenere l'elemento DOM fuori l'oggetto jQuery, e la proprietà childNodes per ottenere i suoi figli:

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

Quindi puoi usare jQuery per scorrere i nodi per trovare il nodo che è l'elemento strong:

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

Ora è possibile utilizzare il DOM per ottenere il valore testo dal nodo successivo:

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

Grazie, quel cod: .clone(). Children ("forte, p, ul"). Remove(). End(). Text() ha fatto quello che ho necessario – WHITECOLOR

+0

@WHITECOLOR: quel codice concatenerà tutti i nodi di testo nell'elemento, quindi si basa sul fatto che non si ha più testo o alcuna interruzione di riga tra elementi figlio. – Guffa

1

Questo codice funziona per me:

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

Il modo migliore è quello di .clone() l'oggetto, .remove() tutto del suo .children(), quindi tornare all'oggetto utilizzando .end() e, infine, ottenere il .text().

Il metodo è descritto in 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 
Problemi correlati