2013-05-30 2 views
2

Я читал документы DOM, и кажется, что в новом стандарте тип узла для разделов CDATA теперь отсутствует.Узел раздела CDATA устарел в DOM4

Похоже, что mozilla избавился от CDATA_SECTION_NODE, так как он устарел. В документе DOM теперь говорится, что его исторический. Мой вопрос: если теперь функция nodeType не обнаруживает CDATA_SECTION_NODE, как DOM справится с этими тегами? То есть, если бы я должен был написать

<script><![CDATA[ /*Some code with < & and what not */ ]]></script> 

то как браузеры справиться с этим, если нет узла для обработки секций CDATA? Он просто читает содержимое и игнорирует строки <!CDATA[ и ]]>?

Кроме того, есть ли где-нибудь, что объясняет решение избавиться от него?

+3

Попробуйте сами.Создайте элемент, добавьте к нему материал CDATA и повторите его дочерние элементы, проверив тип и значение узла – Ian

+0

@Ian: Я тестировал это в Firefox, кажется, что все внутри '' рассматривается как «фиктивный» комментарий, когда просмотр файла HTML. Удивительно, однако, если я поместил раздел cdata в XML-документ, то при проверке элементов я вижу, что он обнаружил узел раздела cdata. Я не уверен, что javascript скажет об этом узле при чтении XML-файла, который его содержит. Спасибо за совет. – jmlopez

+0

CDATA специфичен для SGML и XML, он недействителен в HTML и никогда не был, поэтому корректное и ожидаемое поведение выглядит как «фиктивный» комментарий, потому что «правильный» комментарий имеет ''. Однако я все еще смущен тем, что именно изменилось. Например, если в новом DOM4 нет CDATA, но тег CDATA все еще существует в XML, то как мы будем обрабатывать данные после того, как Mozilla устареет и удалит поддержку DOM? То есть деревенский ходок, ищущий NodeFilter.SHOW_CDATA_SECTION провалится? Итак, как нам их найти? он работает только сейчас, потому что он еще не устарел/удален. – user314159

ответ

0

Есть несколько различных компонентов для обработки CDATA:

  1. ли CDATA это особый тип узла в DOM (интерфейс CDATASection с Node.CDATA_SECTION_NODEnodeType), или это просто текстовый узел.
  2. Как (HTML или XML) синтаксический анализатор обрабатывает разметку, содержащую <!CDATA[ ... ]]> - как это лечить специальные символы (<>&) внутри CDATA, оно испускает один узел для секции CDATA, и если да, это создать Text узел или узел CDATASection в DOM.
  3. Как секции CDATA сериализуются (завернутые в <![CDATA[ ]]> или со специальными символами сбежавших)

Насколько я могу сказать # 2 HTML5, анализатор спецификации реализован в большинстве браузеров и в соответствии с ним, анализатор никогда не испускает узлы CDATASection и в зависимости от контекста

  • либо анализирует содержимое CDATA как «сырой текст» (с различной обработкой специальных символов) - например внутри <script> или <math>
  • или рассматривает CDATA как «фиктивный комментарий», which ends at the first >.

Вопрос о том, как и в случае CDATA должны быть выставлены в DOM не согласована и, несмотря на то удаляется из спецификации DOM4, он по-прежнему доступен, по крайней мере, Gecko (см Mozilla bug 660660, W3C ошибки 12841 и 27386) ,

  • С одной стороны, с точки зрения приложения, работающего с DOM, узел CDATA мало чем отличается от текстового узла - единственная разница заключается в их сериализации в разметке. Поэтому, если CDATA отображается как отдельный тип узла, каждый должен помнить, чтобы проверить его в любое время, когда они хотят проверить текстовый узел.
  • С другой стороны, теряя возможность сериализации определенных разделов документа, поскольку CDATA нарушает работу разработчиков и пользователей инструментов разработки, поскольку он заставляет сериализацию всегда кодировать символы, специально предназначенные для XML/HTML.
Смежные вопросы