2015-01-19 8 views
5

Sto cercando di recuperare il calcolo del testo entro <li> ma non ho bisogno del tag figlio <p> da considerare in questo calcolo. Quindi, quando aggiungo quanto segue, naturalmente calcolerà tutto il testo entro <li>.Recupera il testo dal tag elenco ma non calcola il tag secondario

$('ul li').text().length; 

Da HTML:

<ul> 
    <li>Count me<p>Don't count me please.</p></li> 
</ul> 

Quali sono i possibili modi per raggiungere questo modo che il testo tag di livello inferiore non viene calcolato?

+0

è il tag bambino non volete prendere in considerazione, o il contenuto del tag bambino? – atmd

risposta

5

È possibile clonare l'elemento, togliere i figli e poi estrarre il testo:

var li = $('ul li').clone(); 
li.children().remove(); 
console.log(li.text().length); 

Ciò funzionerà indipendentemente dal numero o il tipo di elementi figlio.

1

Basta sottrarlo?

var x = $('ul li').text().length; 
var y = $('ul li p').text().length; 
console.log(x); 
console.log(y); 
console.log(x-y); 
1

Il metodo usuale di recuperare il testo tramite selettore risulterà difficile perché il metodo text() è avido e otterrà tutto il testo disponibile, anche se si escludono i bambini tramite il selettore.

Se tutto ciò che serve è quello di recuperare il testo che è direttamente all'interno del li solo è possibile ottenere i valori textNode da contents():

var textNodes = $('ul li').contents().filter(function() { 
    return this.nodeType == 3; 
}).get(); 
console.log(textNodes[0]); // = "Count me" 

Example fiddle

1
var len1 = $('ul li').text().length; 
var len2 = $('ul li p').text().length; 
console.log(len1+'=='+len2); 

var liLength = parseInt(len1)-parseInt(len2); 

console.log(liLength); 

JSFIDDLE

+0

Nessuna necessità di parseInt – mplungjan

Problemi correlati