Come analizzare HTML da JavaScript in Firefox?

Qual è il modo migliore per analizzare (ottenere un albero DOM di) un risultato HTML di XmlHttpRequest in Firefox?

MODIFICARE:

Non ho l’albero DOM, voglio acquisirlo.

“ResponseXML” di XmlHttpRequest funziona solo quando il risultato è XML effettivo, quindi ho solo responseText con cui lavorare.

L’hacking innerHTML non sembra funzionare con un documento HTML completo (in ). – Si scopre che funziona bene.

innerHTML dovrebbe funzionare bene, ad es

 // This would be after the Ajax request: var myHTML = XHR.responseText; var tempDiv = document.createElement('div'); tempDiv.innerHTML = myHTML.replace(//g, ''); // tempDiv now has a DOM structure: tempDiv.childNodes; tempDiv.getElementsByTagName('a'); // etc. etc. 

Almeno per le versioni più recenti di Firefox, un modo più semplice è o sarà presto disponibile.

https://developer.mozilla.org/en/HTML_in_XMLHttpRequest indica che a partire da FF11 sarà ansible chiedere un DOM direttamente dall’XHR impostando l’attributo responseType su "document" . A quel punto, l’HTML verrà analizzato e il DOM verrà bloccato in responseXML come per un documento XML.

Puoi usare DOMParser per analizzare HTML – anche tag zuppa:

 var parser = new DOMParser() parser.parseFromString('hi

helloworld

', 'text/html')

Non so se gestisce bene il markup della tabella parziale, ma dovrebbe creare lo stesso DOM del browser stesso per quasi tutti i markup.

Avvia la proprietà responseXML dell’object XMLHttpRequest. Inoltre, se si utilizza innerHTML per aggiungere il responseText di una risposta formattata in HTML, il browser analizzerà il testo e lo assemblerà all’interno del DOM prima ancora di aggiungerlo nel stream di documenti.

Se i tuoi dati sono XHTML, quindi è XML valido, può essere utile DOMParser (Mozilla) o loadXML (IE). In caso contrario, non riesco a pensare a qualcosa di meglio che spogliare il e e quindi passarlo al suo innerHtml.

Vedi 21.1.3 nella guida Javascript di Flanagan (5a edizione).

Colin