2012-06-21 13 views
8

Qual è un buon modo per estrarre il testo da un elemento jQuery quando il testo stesso è adiacente a un altro elemento contenente testo?Come accedere al testo all'interno di un elemento ignorando del testo all'interno di un tag adiacente al testo?

In questo esempio, voglio ottenere il testo: 'testo che voglio', ignorando il testo nella elemento figlio adiacente:

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

La mia soluzione era quello di ottenere tutto il testo nel tag <span> e quindi eliminare tutto il testo nel tag <a>. Questo si sente un po 'imbarazzante quindi mi chiedo se c'è un modo migliore:

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

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

risposta

7

Devi andare ai nodi di testo per questo:

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

http://jsfiddle.net/UeBZq/

+2

Ho sempre dimenticato che i nodi di testo 'nodeType === 3', sono ben fatti. Può aggiungere che se OP vuole tagliare le interruzioni di riga e la spaziatura extra prima/dopo il testo che desidera, puoi usare ['$ .trim'] (http://api.jquery.com/jQuery.trim/) - [ violino] (http://jsfiddle.net/ult_combo/UeBZq/2/). –

+1

Questo è fantastico! Solo FYI: se puoi garantire che il textnode sarà sempre il primo elemento (prima di ogni elmo infantile) .. puoi semplicemente fare riferimento direttamente senza la necessità di filtrare in questo modo: '' var text_i_want = $ ("span") .contents() [0] '' .. Oppure puoi usare ''. .first() '' se vuoi continuare a concatenare i metodi jQuery. –

2

rimuovere un tag e ottenere il contenuto dello span. 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

Perché 'JSON.stringify'? potresti usare '$ ('span'). text()'. –

+0

Non ho intenzione di refactoring questo appena ha funzionato :) pulito ora! –

Problemi correlati