2015-07-04 14 views
5

ho una variabile che contiene HTML semplice sembra il seguente esempio - il contenuto della variabile viene generata dinamicamente tramite Ajax:jQuery: come estrarre il testo da elemento specifico all'interno variabile

var errors = "<span id='id1'>Value 1</span><span id='id2'>Value 2</span><span id='id3'>Value 3</span><span id='id4'>Value 4</span><span id='id5'>Value 5</span>"; 

Come posso ottenere il testo di un elemento specifico tramite il suo ID all'interno di questa variabile, ad es. il testo di span con ID = 'id3'? Qui il risultato dovrebbe essere "Value 3".

Ho provato quanto segue ma il risultato che ottengo è sempre o una stringa vuota o "[object Object]":

  1. $(errors).filter('#id3')
  2. $(errors).filter('#id3').text()
  3. $(errors).find('#id3').text()

Aggiornamento:
Dopo aver letto i commenti e le risposte su questo ho diviso il mio codice e sembra che il problema sia con la parte di successo dell'Ajax dove data contiene ciò che ho mostrato nell'esempio sopra ma sembra che non venga memorizzato nella variabile "errors". (Se hardcode la variabile, allora funziona con .filter.)

var errors = ''; 
$.ajax({   
    type: "post", 
    url: "ajax.php", 
    cache: "false", 
    data: { 
     node: 'fetchErrors', 
     selectedLang: selectedLang 
    }, 
    success: function(data){ 
     errors = data; 
    } 
}); 

Qualcuno può aiutarmi con questo?

Molte grazie in anticipo, Mike

+3

Ho provato il vostro secondo ans ($ (errors) .filter ('# id3'). Text()) in firefox funzionante. –

+1

concordare con @JohnDaniel ... funziona bene in chrome. – manta

+0

@JohnDaniel: Grazie per questo. Posso confermare questo ora e ho appena fatto un aggiornamento al mio post. – keewee279

risposta

2

Questo funziona per me (fiddle).

success: function(data){ 
    var result = $(data).filter("#id3").text(); 
} 
+0

Grazie. Lo accetterò perché mi ha indirizzato nella giusta direzione. Il mio problema, tuttavia, è stato con l'Ajax da quando jQuery è passato prima del risultato Ajax, quindi spostando tutto all'interno della parte di successo l'ha risolto e quindi questo approccio funziona correttamente. – keewee279

+0

@keewee yes ajax è '' 'asincrono''', il che significa che la funzione termina prima che i risultati (' '' data''' nel tuo caso) provengano dal server. – dee

4

Tu eri sulla strada giusta ...

var errors = "<span id='id1'>Value 1</span><span id='id2'>Value 2</span><span id='id3'>Value 3</span><span id='id4'>Value 4</span><span id='id5'>Value 5</span>"; 
var obj = $(errors); 
var filter = $(obj).filter('#id3'); 
console.log(filter.text()); 

jsfiddle: fiddle

+0

Grazie mille! Ho provato questo ma restituisce anche una stringa vuota per me. Aggiornamento – keewee279

+0

: Grazie per aver aggiunto il violino. Posso confermare che questo funziona anche per me e ho appena fatto un aggiornamento al mio post. – keewee279

1

Questo fa il lavoro:

$(errors).filter("#id3").text() 
+0

Grazie. Ho provato questo (vedi sopra) ma non ha funzionato nel mio caso. – keewee279

2

prova ad aggiungere async: false a proprietà Ajax.

+0

Grazie - puoi spiegare cosa dovrebbe fare? – keewee279

Problemi correlati