Подтвердить что ты не робот

В чем разница в уровнях DOM и как они взаимосвязаны?

Я часто слышу о "уровне DOM 1", "DOM level 2", "DOM level 3" и "DOM level 4" и понял, что я не знаю разницы между ними или их отношением к каждому из них другие.

Я знаю самые основы - DOM - это Document Object Model, и это то, что обеспечивает доступ к языкам сценариев (в частности, но, насколько я знаю, не ограничиваясь различными версиями ECMAScript, такими как ECMAScript 5.1) для доступа к элементам HTML-документа. (Некоторые сайты, которые я читал, например, dom введение на quirksmode - говорят, что это для любого XML-документа, но HTML является достаточным подмножеством.)

Даты на w3c DOM технических отчетах, по-видимому, подразумевают, что каждый последующий уровень DOM заменяет предыдущие.

К сожалению, лучшая ссылка, которую я нашел для разъяснения, была wikipedia, которая, похоже, говорит то же самое - в разделе стандартизации говорится, что последующие уровни добавлены "дополнительная функциональность, не говоря уже об удалении чего-либо.

Теперь, для моих вопросов, которые могут быть быстрым огнем, но, надеюсь, выражают общее состояние моего невежества:

  • Какое отношение одного уровня DOM к другому?
  • Являются ли DOM нижнего уровня полными подмножествами DOM более высокого уровня? Удалена ли какая-либо функциональность по мере продвижения уровня DOM? Когда я вижу утверждения типа The level 1 DOM will work fine on an HTML document и In the Level 1 DOM, each object, whatever it may be exactly, is a Node (оба из вставки quirksmode), означает ли это, что такие утверждения верны для уровней 2, 3 и 4? (Все это один и тот же вопрос, просто заданный разными способами)
  • Является ссылкой на уровень DOM на самом деле немного больше, чем сокращенный способ того, насколько современный пользовательский агент должен работать для определенной функции?

Очевидно, что я могу изучать каждую спецификацию технических отчетов w3c DOM, но надеялся получить ответы от тех, у кого есть опыт из первых рук. Просто взглянув на раздел изменений спецификации для уровня DOM 3, я вижу, что большинство изменений с 2 ​​по 3 были дополнениями, хотя некоторые из ключевых реализаций в интерфейс Node изменился. Изменились ли эти изменения?

Я хотел бы сделать больше, чем просто кивнуть в следующий раз, когда кто-нибудь скажет мне: "О, этот уровень DOM 2, так что все в порядке", поэтому приветствую любые ссылки, которые я пропустил или из первых рук, которые я не получил из моих исследований.

4b9b3361

Ответ 1

Во-первых, я свяжу сообщение MDN-запись уровней DOM (выделение в оригинале):

DOM использовался для записи в виде набора уровней. Это уже не так. В настоящее время он поддерживается как DOM Living Standard. На этой странице представлен исторический обзор старых дней.

Это подтверждается в документе W3C под названием " W3C DOM4". Мы могли бы считать, что это означает "DOM Level 4", и предположим, что он добавляет дополнительный уровень DOM, но текст спецификации фактически говорит:

Этот документ опубликован как снимок DOM Living Specification.

Итак, это историческая дискуссия, но все же стоит иметь.

"Уровень DOM" - это набор спецификаций, описывающих объекты, методы и поведение объектов DOM. Более высокие уровни спецификации DOM построены на предыдущих уровнях. Изменения произошли двумя способами:

  • Добавление совершенно новой категории спецификаций (например, уровень 3 добавляет спецификации "Проверка" и "Загрузка и сохранение", которые не существовали на Уровне 2)

  • Модификация существующей категории спецификаций (например, обновление спецификации Core)

Очевидно, что первый тип изменений был чисто аддитивным, а не субтрактивным. Второй вид изменений, по-видимому, был почти исключительно аддитивным, вероятно, потому, что W3C был заинтересован в сохранении обратной совместимости с предыдущими версиями.

Изменения, которые не поддерживают обратную связь, обычно редки и довольно незначительны. Изменение Document.doctype, которое вы указали, например, было в основном аддитивным. Уровень 3 добавил предложение:

Для документов HTML объект DocumentType может быть возвращен независимо от наличия или отсутствия объявления типа документа в документе HTML.

Это просто дало большую гибкость, чтобы позволить реализациям DOM добавлять в doctype в HTML, когда автор пропустил <!DOCTYPE>. Единственная функциональность, которая могла бы сломаться, - это способность программно обнаруживать наличие указанного автором типа doctype, что, по-видимому, не особенно ценно.

Вероятно, причина, по которой вы слышали, что кто-то сказал: "О, этот уровень DOM 2, так что все в порядке", потому что уровень DOM 2 более широко поддерживается, чем уровень DOM 3. В некоторых случаях это даже не вопрос о старой поддержке браузера: Firefox отметил их отсутствие поддержки DOM 3 "Загрузка и сохранение" спецификации как WONTFIX. Напротив, все спецификации уровня 2 очень хорошо поддерживаются современными браузерами и пользуются поддержкой гораздо более старых браузеров (поскольку уровень 2 на четыре года старше уровня 3).

Ответ 2

Всего несколько заметок на DOM4, чтобы добавить ответ apsillers:

... На уровне 1 DOM, каждый объект, каким бы он ни был, является Node..., это означает, что такие утверждения верны для уровни 2, 3 и 4?

Это определенная нет. Атрибуты в DOM4 не являются узлами.

DOM4 выполняет ряд важных изменений, не поддерживающих обратную совместимость. Атрибуты не являются изменениями узлов, это большой, если вы не используете javascript или утиный язык. Также document.createElement() в XML-документе создаст элемент в пространстве имен http://www.w3.org/1999/xhtml, где более ранние уровни создадут элемент без пространства имен. Браузеры давно это сделали, но типичные XML-ориентированные реализации DOM использовали DOM3 и более ранний путь. Это большой сдвиг, если вы переходите от реализации DOM3 к DOM4 в контексте, отличном от браузера.