2009-09-21 20 views

Respuesta

6

Hice algunas pruebas en este y descubrió que todo el código HTML allá </html> se añade al <body> durante el análisis. Entonces, en todos los navegadores que probé (IE6/7, FF3, Opera10, Chrome2), se podía acceder al comentario como document.body.lastChild y su contenido se puede recuperar a través de document.body.lastChild.data.

+0

Excelente trabajo! De hecho, tenía una fila vacía al final de mi archivo, por lo que document.body.lastChild.data era '\ n', pero al buscar en firebug veo que el comentario existe como un nodo hijo a cuerpo. ¡Gracias! –

+0

Esto no es una solución genérica. – powtac

+0

Bueno - usando esta técnica con 'document.firstChild' para comentarios * antes * cualquier otro contenido. –

2

El estándar DOM para el nodo #document (la raíz lógica de un documento DOM) permite exactamente un nodo de elemento (es decir, uno < HTML>), pero muchos nodos de comentarios (y otros tipos de nodo más esotéricos). Como tal, debemos esperar

document.lastChild 

para ser el nodo de comentario que desee en esta instancia. Curiosamente, esto no funciona (al menos en Safari 4).

Poner un nodo de comentario antes de que el nodo HTML esté bien en mis pruebas. En este caso, document.childNodes.length es 2 y document.firstChild es el comentario. Al hacer un comentario después de que el nodo HTML parece insertarse en el lugar incorrecto en DOM - document.childNodes.length permanece en 1, y el nodo en el inspector DOM se ve como el último elemento secundario del nodo BODY. Sin embargo, ¡no puedo encontrar ese nodo usando la API DOM en absoluto!

Esto parece ser una rareza en (al menos) la implementación de DOM de Safari. Una prueba rápida con Firefox muestra que ni siquiera puede encontrar un nodo de comentarios si es la primera entrada en el documento.

Edit: OK, según el comentario de Aaron y reflexionando un poco más, es probable que el analizador de la página simplemente esté descartando los nodos durante el análisis. Ya no estoy seguro de que esto sea un error, pero no puedo encontrar nada en la especificación (XML) que permita a los analizadores descartar nodos de comentarios completos, solo su contenido textual.

+1

El estándar permite varios comentarios pero la mayoría de los analizadores XML/HTML no los ponen en el DOM. No es un error ya que el estándar no requiere que lo hagan. –

+0

esos comentarios son principalmente para el analizador ... doctype, etc. – n00b

+0

Un doctype no es un comentario (y usa una sintaxis diferente). Los comentarios son puramente para humanos, pero * deberían * ser preservados durante el análisis, imo. –

Cuestiones relacionadas