Как я могу прочитать комментарий HTML, расположенный за пределами <html>, используя JavaScript? - PullRequest
5 голосов
/ 21 сентября 2009

У меня есть комментарий HTML вне корневого узла DOM, который мне нужно прочитать:

<html>
   ... other stuff
</html>
<!-- The comment I want to read -->

Можно ли как-то сделать это с помощью JavaScript?

Ответы [ 3 ]

6 голосов
/ 21 сентября 2009

Я провел некоторое тестирование по этому вопросу и обнаружил, что любой HTML за пределами </html> добавляется к <body> во время синтаксического анализа. Итак, во всех браузерах, которые я тестировал (IE6 / 7, FF3, Opera10, Chrome2), комментарий был доступен как document.body.lastChild, и его содержимое можно было получить через document.body.lastChild.data.

2 голосов
/ 21 сентября 2009

Стандарт DOM для узла #document (логический корень документа DOM) допускает ровно один узел элемента (то есть один ), но множество узлов комментариев (и других, более эзотерических типов узлов). Таким образом, мы должны ожидать

document.lastChild

будет узлом комментария, который вы хотите в этом случае. Как ни странно, это не работает (по крайней мере, в Safari 4).

Поместить узел комментариев до узла HTML в моих тестах нормально. В этом случае document.childNodes.length равен 2, а document.firstChild является комментарием. Помещение комментария после того, как узел HTML кажется вставленным не в том месте в DOM - document.childNodes.length остается равным 1, а узел в инспекторе DOM рассматривается как последний дочерний элемент узла BODY. Однако я не могу найти этот узел, использующий DOM API!

Кажется, это странность (по крайней мере) в реализации Safari для DOM. Быстрый тест с использованием Firefox показывает, что он даже не может найти узел комментария, если это первая запись в документе!

Редактировать: ОК, согласно комментарию Аарона и некоторым размышлениям, вполне вероятно, что анализатор страницы просто отбрасывает узлы во время синтаксического анализа. Я больше не уверен, что это ошибка, но я не могу найти в спецификации (XML) ничего, что позволяло бы анализаторам отбрасывать целые узлы комментариев - только их текстовое содержимое.

0 голосов
/ 21 сентября 2009

Существует плагин jQuery для этой проблемы: http://www.bennadel.com/index.cfm?dax=blog:1563.view

Кажется, что

objChildNode.nodeType === 8

это точка!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...