Мастер-классы по Javascript Екатеринбург Ростов-на-Дону Москва Узнать больше...
Содержание (скрыть) Содержание (показать)

Дерево DOM

  1. Пример DOM
  2. Ещё узлы
  3. Исследование DOM с помощью инструментов разработчика
  4. Возможности, которые дает DOM
  5. Итого

Согласно DOM-модели, документ является иерархией, деревом.

Каждый HTML-тег образует узел дерева с типом «элемент». Вложенные в него теги становятся дочерними узлами. Для представления текста создаются узлы с типом «текст».

Проще говоря, DOM — это представление документа в виде дерева тегов, доступное для изменения через JavaScript.

Пример DOM

Построим, для начала, дерево DOM для следующего документа.

<html>
  <head>
    <title>О лосях</title>
  </head>
  <body>
     Правда о лосях
   </body>
</html>

В этом дереве выделено два типа узлов.

  1. Теги образуют узлы-элементы (element node) DOM-дерева. Естественным образом одни узлы вложены в другие.
  2. Текст представлен текстовыми узлами. Текстовые узлы не могут иметь потомков.

Структура дерева образована за счет синих элементов-узлов — тегов HTML.

Ещё узлы

Дополним страницу новыми тегами и комментарием:

<!DOCTYPE HTML>
<html>
  <head>
    <title>О лосях</title>
  </head>
  <body>
    Правда о лосях
    <ol>
      <li>Лось — животное хитрое</li>
      <!-- комментарий -->
      <li>..и коварное!</li>
    </ol>
  </body>
</html>

В этом примере появился узел нового типа — узел-комментарий. Казалось бы, зачем комментарий в DOM? На отображение-то он всё равно не влияет. Но так как он есть в HTML — обязан присутствовать в DOM-дереве.

Всё, что есть в HTML, находится и в DOM.

Как вы думаете, пробелы и переводы строки между тегами должны попадать в DOM ?

Элемент с пробелами <li>   </li> чем-то должен отличаться от <li></li> в DOM ?

Поскольку DOM-модель в точности соответствует документу, пробельные символы так же важны, как и любой другой текст. Ответ на оба вопроса: «Да».

На картинке выше текстовые узлы, содержащие пробелы, выделены серым.

Пробелы есть в DOM, если они есть в документе

Пробелы и переносы строки между тегами становятся пробельными узлами. Если не будет пробелов между тегами — не будет и пробельных узлов.

Например: <li></li> — узел-элемент без потомков.

Следующий пример вообще не содержит пробельных узлов:

<!DOCTYPE HTML><html><head><title>Title</title></head><body></body></html>

В IE до версии 9 пробельных узлов нет

IE до версии 9 не генерировал узлы из пробелов. Это очень важно, т.к. приводит к тому, что DOM-дерево в IE6,7,8 не такое как в остальных браузеров.

Точнее говоря, оно такое же, как на картинке выше, но без пробельных узлов.

Это различие следует иметь в виду при разработке под IE<9.

DOCTYPE — тоже узел!

Вообще-то это секрет, но DOCTYPE тоже является DOM-узлом, и находится в дереве DOM слева от HTML (на рисунке выше этот факт скрыт).

P.S. Насчет секрета - конечно, шутка, но об этом и правда далеко не все знают. Сложно придумать, где такое знание может пригодиться…

Исследование DOM с помощью инструментов разработчика

Изучать DOM можно с помощью инструментов разработки, встроенных в браузер.
Например:

  1. Откройте losi.html.
  2. Откройте Firebug или любой другой инструмент разработчика.
  3. Перейдите на вкладку HTML в Firebug или Elements в Safari/Chrome или…в общем, вы поняли.
  4. Смотрим на DOM, сворачиваем-разворачиваем узлы.

DOM не полностью отображается в инструментах!

В инструментах разработчика не отображаются пробельные узлы.

Это сделано для удобства просмотра. На самом-то деле они есть.

Возможности, которые дает DOM

Зачем, кроме красивых рисунков, нужна иерархическая модель DOM?

DOM нужен для того, чтобы манипулировать страницей — читать информацию из HTML, создавать и изменять элементы.

Например, можно поменять цвет BODY и вернуть обратно:

document.body.style.backgroundColor = 'red';
alert('Поменяли цвет BODY');

document.body.style.backgroundColor = '';
alert('Сбросили цвет BODY');

Фактически, DOM предоставляет возможность делать со страницей всё, что угодно.

Итого

  • DOM-модель — это внутреннее представление HTML-страницы в виде дерева.
  • Все элементы страницы, включая теги, текст, комментарии, являются узлами DOM.
  • У элементов DOM есть свойства и методы, которые позволяют изменять их.
  • Кстати, DOM-модель используется не только в JavaScript, это известный способ представления XML-документов.

    В следующих главах мы лучше познакомимся с DOM и увидим, какие свойства и методы нужны, чтобы творить красивые штуки со страницей.


Комментарии

  1. Приветствуются комментарии, содержащие дополнения и вопросы по статье, и ответы на них.
  2. Если ваш комментарий касается задачи -- откройте её в отдельном окне и напишите там.
  3. Комментарии без смысла, с рекламой или не о статье вообще - удаляются.
Наверх

Содержание

Реклама

Нашли опечатку?

Нашли опечатку на сайте? Что-то кажется странным?
Выделите соответствующий текст и нажмите Ctrl+Enter!

Последние Комментарии

Помоги другим!

Помоги другим узнать о хорошей статье!