2012-04-05 16 views
6

Questa è una domanda semplicissima che non riesco proprio a trovare una buona risposta.jQuery OTTENERE come oggetto jQuery traversable

$.get('/myurl.html', function(response){ 
    console.log(response); //works! 
    console.log($(response).find('#element').text()); //null :(
}, 'html'); 

Sto solo cercando di attraversare la mia risposta HTML. Finora l'unica cosa che posso pensare è lavorare su espressioni regolari all'interno dei tag del corpo e usarlo come una stringa per creare il mio oggetto jQuery traversabile. Ma sembra solo stupido. Qualcuno si preoccupa di indicare il modo giusto per farlo?

Forse è il mio html?

<html> 
    <head> 
     <title>Center</title> 
    </head> 
    <body> 
     <!-- tons-o-stuff --> 
    </body> 
</html> 

funziona questo anche bene, ma non soddisfare le mie esigenze:.

$ ('# myelem') Carico ('/ #element myurl.html');

+1

Se stai cercando un elemento nella risposta html con un attributo 'id' con il valore" elemento ", allora mi sembra corretto. Non sono sicuro del perché non funzionerebbe. – jessegavin

+1

Come appare l'html che stai recuperando? –

+0

Questo dovrebbe rispondere alla tua domanda: http://stackoverflow.com/questions/9540218/a-javascript-parser-for-dom/9540313#9540313 –

risposta

7

Fallisce perché non piace <html> e <body>.

con il metodo descritto qui: A JavaScript parser for DOM

$.get('/myurl.html', function(response){ 
    var doc = document.createElement('html'); 
    doc.innerHTML = response; 

    console.log($("#element", doc).text()); 
}, 'html'); 

penso che quanto sopra dovrebbe funzionare.

+0

Ha funzionato. Ma perché? – Fresheyeball

+0

Avrei bisogno di guardare i dettagli interni di come funziona jquery per rispondere a questo. Fondamentalmente, jquery ha un modo su come costruisce gli oggetti dom quando viene dato un argomento html.Questo era semplice non compatibile con le stringhe html che contengono i tag 'body' e' html', ma fortunatamente non è l'unico modo e il modo in cui sopra è un modo diverso di farlo. –

+0

questo è davvero interessante. – Fresheyeball

0

Prova questo:

$("#element", $(response)).text() 

Questo cerca l'ID elemento nel $ (risposta) trattando $ (risposta) come oggetto DOM.

+0

response.responseText non è definito – Fresheyeball

1

Quando jQuery analizza HTML, normalmente rimuove i tag html e body, quindi se l'elemento che si sta cercando si trova al livello superiore della struttura del documento una volta rimossi i tag html e body, la funzione find potrebbe non essere in grado di individuare l'elemento che stai cercando.

Vedere questa domanda per ulteriori informazioni - Using jQuery to search a string of HTML

+0

Non era un elemento di livello superiore. – Fresheyeball

-1

forse sto equivoco qualcosa, ma

.find('#element') 

partite elementi con un ID di "elemento", come

<p id="element"> 

Dal Non vedo le "tonnellate di cose" HTML Non capisco quali elementi stai cercando di trovare.

+1

Questa non è una risposta David. Sarebbe più appropriato averlo postato come commento. –