2009-05-20 20 views
13

¿Cuál es la mejor forma de analizar (obtener un árbol DOM de) un resultado HTML de XmlHttpRequest en Firefox?Cómo analizar HTML desde JavaScript en Firefox?

EDIT:

debo hacer no tienen el árbol DOM, quiero adquirirla.

El "responseXML" de XmlHttpRequest funciona solo cuando el resultado es XML real, por lo que solo tengo responseText para trabajar.

El hack de innerHTML no parece funcionar con un documento HTML completo (en < html> </html>). - resulta que funciona bien.

+0

Navegadores que analizan el código html simple ya que existen. Pero eso es tan triste que no existe una forma simple y estándar que pueda invocar al analizador del navegador para hacer un objeto HTMLDocument a partir de una cadena html ... – Calmarius

Respuesta

20

innerHTML debería funcionar bien, por ejemplo,

// This would be after the Ajax request: 
var myHTML = XHR.responseText; 
var tempDiv = document.createElement('div'); 
tempDiv.innerHTML = myHTML.replace(/<script(.|\s)*?\/script>/g, ''); 

// tempDiv now has a DOM structure: 
tempDiv.childNodes; 
tempDiv.getElementsByTagName('a'); // etc. etc. 
+0

Parece que es lo mejor que puedo hacer. Gracias por el consejo sobre

1

Enlaza la propiedad responseXML del objeto XMLHttpRequest. Además, si usa innerHTML para agregar el texto de respuesta de una respuesta con formato HTML, el navegador analizará el texto y lo ensamblará dentro del DOM antes incluso de agregarlo al flujo de documentos.

1

Si sus datos son XHTML, entonces es XML válido, entonces DOMParser (Mozilla) o loadXML (IE) pueden ayudar. Si no, no puedo pensar en nada mejor que pelar el y y luego pasarlo a innerHtml de un 's.

Consulte 21.1.3 en la guía JavaScript de Flanagan (5ª edición).

Colin

3

Al menos para las versiones más nuevas de Firefox, una forma más fácil está o estará disponible pronto.

https://developer.mozilla.org/en/HTML_in_XMLHttpRequest indica que a partir de FF11 será posible solicitar un DOM directamente desde el XHR configurando el atributo responseType en "document". En ese punto, el HTML se analizará y el DOM se pegará en responseXML como para un documento XML.

0

Puede utilizar el DOMParser a analizar HTML - incluso etiquetar sopa:

var parser = new DOMParser() 
parser.parseFromString('<!DOCTYPE html><html><head><title>hi</title></head><body><p>hello<b>world</b></p>', 'text/html') 

No sé si se maneja bien etiquetado de la tabla parcial, pero debe crear el mismo DOM el propio navegador hace por bastante mucho cualquier marcado.

Cuestiones relacionadas