What is domhtml. DOM manipulation in pure JavaScript

The DOM is often referred to as the DOM tree because it is made up of a tree of objects called nodes. In you learned what the Document Object Model (DOM) is, how to access the document object and change its properties using the console, and we also learned the difference between HTML source code and DOM.

In this tutorial, you'll find the HTML terminology you need to work with JavaScript and the DOM, learn about tree and DOM nodes, and learn to identify the most common types of nodes. You can also create a JavaScript program in the console to interactively modify the DOM.

HTML terminology

Understanding HTML and JavaScript terms is critical to working with the DOM. Let's take a quick look at the main terms.

Look at this HTML element:

Home

It has an anchor, which is a link to index.html.

  • a - tag
  • href - attribute
  • html - attribute value
  • Home - text.

Everything between the opening and closing tags is an HTML element.

Let's go back to the index.html file from the previous tutorial:




Learning the DOM


Document Object Model



The easiest way to access an element with JavaScript is with the id attribute. Let's add the above link to the index.html file with id="nav".

...

Document Object Model


Home

...

Load (or refresh) the page in a browser window and look at the DOM to make sure the code has been updated.

Then use the getElementById() method to access the entire element. Enter the following in the console:

document.getElementById("nav");
Home

The getElementById() method will retrieve the entire element. Now, instead of having to type in this object and method every time you need to access the nav link, you can put the element in a variable to make it easier to work with.

let navLink = document.getElementById("nav");

The navLink variable contains the anchor. Here you can easily change attributes and values. For example, to change the location of a link, change the href attribute:

navLink.href = "https://www.wikipedia.org";

You can also change the text by reassigning the textContent property:

navLink.textContent = "Navigate to Wikipedia";

Now, if you view this element in the console or check the Elements tag, you will see how it has been updated.

navlink;
Navigate to Wikipedia

Changes will be reflected on the front-end as well.

Refreshing the page will return all the original values.

At this point, you should understand how to use the document method to access an element, how to assign an element to a variable, and how to change properties and values ​​on an element.

Tree and DOM Nodes

All elements in the DOM are defined as nodes. There are many types of nodes, but there are three main ones that you will work with most often:

  1. Element Node
  2. Text Node
  3. Comment Node

When an HTML element is an element in the DOM, it is called an element node. Any single text outside an element is a text node, and HTML comment– a comment node. Apart from these three types of nodes, the document object itself is the document node, which is the root node of all other nodes.

The DOM consists of a tree structure of nested nodes, often referred to as the DOM tree. You probably know what a family tree is - it is a schematic representation of family ties, which consists of parents, children and immediate family. Nodes in the DOM are also called parent and child nodes based on their relationship to other nodes.

For example, create a nodes.html file. add a text node to it, as well as comment and element nodes.




Learning About Nodes


An element node



A text node.

The html element node is the parent. head and body are html child nodes. body contains three child nodes, and they are all at the same level - the type of the node does not affect the level of nesting.

Note: When working with DOM generated by HTML, padding source code HTML creates a lot of empty text nodes that won't be visible in the DevTools Elements tab. More about this at the link.

Node type definition

Each node in a document has a type, which is accessed through the nodeType property. The Mozilla Developer Network has an updated list of all node type constants. Below is a table of the most common node types.

In the Elements tab of the Developer Tools, you may notice that whenever you click and select any line in the DOM, the value == $0 appears next to it. This is a very convenient way to access the currently active element.

In the node.html console, click on the first element in the body (h1).

Using the console, find out the type of the selected node using the nodeType property.

$0.nodeType;
1

By selecting the h1 element, you will see 1 as the output, which refers to ELEMENT_NODE. Do the same with other nodes and they will return 3 and 8 respectively.

By knowing how to access an element, you can see the type of the node without highlighting the elements in the DOM.

document.body.nodeType;
1

In addition to nodeType, you can also use the nodeValue property to get the value of a text or comment node, and nodeName to get the element tag.

Changing the DOM with Events

So far, you've seen how to change the DOM in the console, and such changes are known to be temporary; every time the page is refreshed, all changes are lost. In you updated the background color of the page in the console. Try to combine what you've learned in this tutorial with what you already know to create an interactive button that changes the background color.

Go back to the index.html file and add a button element with an id. You also need to add a link to the new file in the new js directory js/scripts.js.




Learning the DOM


Document Object Model





An event in JavaScript is an action that the user performs. The user hovers over an element, clicks on it, or presses a certain key on the keyboard - these are all events. In this particular case, the button needs to perform an action when the user clicks on it. To do this, you need to add an event listener. Create a scripts.js file and save it in a new js directory. You need to define a button element in the file and assign it to a variable.

Using the addEventListener() method, the button will listen for clicks and execute its function after the click.

...
button.addEventListener("click", () => (
// action will go here
});

Inside the function, you need to place the code from the previous manual to change the background color to fuchsia.

...

This is what the script looks like:

let button = document.getElementById("changeBackground");
button.addEventListener("click", () => (
document.body.style.backgroundColor = "fuchsia";
});

Save and close the file. Refresh the index.html page in the browser. Press new button, and the background color of the page will change.

Tags: ,

When opening any HTML document the browser first parses its content and, based on this parsing, creates the HTML Document Object Model or shorter DOM.

The DOM is made up of hierarchically nested objects called knots. Each node in the structure represents an HTML element located on the page.

Using the DOM you can interact ( read, modify, delete) with the content of HTML documents from scripts.

Below is the HTML code of the document and the DOM that would be created by the browser based on this code:

HTML DOM

HTML DOM.

Hi all.

All the rectangles shown in the picture are objects (or nodes). The nodes of different type.

The Document node is marked in red. Any call to the DOM must begin with a call to this node.

Marked in green element nodes. For each HTML element on the page, the browser creates a corresponding element node.

The content of the elements is stored in text nodes. The text nodes are marked in blue in our diagram.

For everybody HTML attribute element is created attribute node. The attribute node is marked in pink in the diagram.

Note: don't forget that text is always stored in text nodes, not a property of the element. Those. in order to access the content of an HTML element, you must access the property of its text node.

Relationships between nodes

Nodes in an object structure are related to each other. There are several special terms to describe relationships between nodes:

parent node ( parent node) - the parent node in relation to the considered object is the node in which the considered object is nested. On our scheme in relation to the nodes

and

is parent. For Node node is parent <head>.</p> <p><b>Child nodes ( <i>child node</i>) </b>- a descendant node in relation to the considered object is a node that is nested in the considered object. On our diagram in relation to the node <body> <h1>and <p>They are descendants. For Node <head>descendant is <title>.</p> <p><b>Sibling nodes ( <i>sibling node</i>) </b>- nodes that are at the same nesting level with respect to their parent node. In our diagram, the sibling nodes are <body>and <head>, <p>The topmost node in the DOM is called <b>root</b>. In our diagram, the root is <html>(because the document object is not part of the DOM).</p> <p>This section provides a brief introduction to the Document Object Model (DOM) - what is the DOM, how are <a href="https://zhumor.ru/en/internet/polnym-sintaksisom-yazyka-html-sintaksis-html-i-struktura-html-dokumenta.html">HTML structures</a> and <a href="https://zhumor.ru/en/computer/fail-xsd-xml-schema-xml-shema-opisanie-struktury-xml-dokumentov-kak-otkryt.html">XML documents</a> and how to interact with them. This section contains <a href="https://zhumor.ru/en/internet/edinaya-sistema-upravleniya-normativno-spravochnoi-informaciei-nsi.html">background information</a> and examples.</p> <h2>What is the Document Object Model (DOM)?</h2> <p>The Document Object Model (DOM) is <a href="https://zhumor.ru/en/computer/xperia-c5-ultra-dual-zelenyi-sony-xperia-c5-ultra-dual-e5533-selfi-gigant-bez.html">software interface</a>(API) for HTML and XML documents. The DOM provides a structured representation of a document and defines how that structure can be accessed from programs that can change the document's content, style, and structure. A DOM representation consists of a structured group of nodes and objects that have properties and methods. Essentially, the DOM connects a web page to scripting languages ​​or programming languages.</p><p>A web page is a document. The document can be presented both in the browser window and in the HTML code itself. Either way, it's the same document. The DOM provides another way to represent, store, and manage this document. The DOM fully supports the object-oriented representation of a web page, making it possible to change it using a scripting language like JavaScript.</p> <h2>How is the DOM accessible?</h2> <p>You don't have to do anything special to work with the DOM. <a href="https://zhumor.ru/en/computer/skripty-dlya-tyuryagi-mozilla-firefox-ustanovka-skriptov-v-razlichnye.html">Various browsers</a> have different DOM implementations, these implementations show varying degrees of compliance with the actual DOM standard (this is a topic we have tried not to cover in this documentation), but each browser uses its own DOM to make web pages accessible to scripting languages.</p> <p>When creating a script using an element<script>, либо включая в веб страницу инструкцию для загрузки скрипта, вы можете немедленно приступить к использованию программного интерфейса (API), используя элементы или для взаимодействия с самим документом, либо для получения потомков этого документа, т.е. различных элементов на странице. Ваше программирование DOM может быть чем-то простым, например, вывод сообщения с использованием функции объекта , или использовать более сложные <a href="https://zhumor.ru/en/computer/javascript---dom-metody-dlya-poiska-uzlov-kak-jquery-razbiraet-selektor.html">методы DOM</a>, которые создают новое содержимое, как показанно в следующем примере:</p><p> <body onload="window.alert("добро пожаловать на мою домашнюю страницу!");"> </p><p>В следующем примере внутри элемента <script> определен код JavaScript, <a href="https://zhumor.ru/en/computer/skript-php-zapisi-dannyh-v-mysql-kak-sdelat-zapis-v-bazu-dannyh-mysql-ispolzuya-php.html">данный код</a> устанавливает функцию при загрузке документа (когда весь DOM доступен для использования). Эта функция создает <a href="https://zhumor.ru/en/computer/vindovs-10-propal-rabochii-stol-sozdanie-novogo-elementa-proverka.html">новый элемент</a> H1, добавляет текст в данный элемент, а затем добавляет H1 в дерево документа:</p> <span>< html </span>> </span> <span>< head </span>> </span> <span>< script </span>> </span> <span> // запуск данной функции при загрузке документа </span> window. onload = function () { <span> // создание нескольких элементов </span> <span> // в пустой <a href="https://zhumor.ru/en/internet/primer-sozdaniya-html-stranicy-v-bloknote-osnovy-html-html-gotovaya-rabota.html">HTML странице</a> </span> heading = document. createElement<span>( </span>"h1" ) ; heading_text = document. createTextNode<span>( </span>"Big Head!" ) ; heading. appendChild<span>( </span> heading_text) ; document. body. appendChild<span>( </span> heading) ; } <span></ script </span>> </span> <span></ head </span>> </span> <span>< body </span>> </span> <span></ body </span>> </span> <span></ html </span>> </span> <h2>Важные типы данных</h2> <p>Данный раздел предназначен для краткого описания различных типов и объектов в простой и доступной манере. Существует некоторое количество различных типов данных, которые используются в API, на которые вы должны обратить внимание. Для простоты, синтаксис примеров в данном разделе обычно ссылается на узлы как на element s, на массивы узлов как на nodeList s (либо просто element s) и на атрибуты узла, просто как на attribute s.</p> <p>Ниже таблица с <a href="https://zhumor.ru/en/internet/operacionnye-sistemy-semeistva-linux-opisanie-linux-linux-kratkaya.html">кратким описанием</a> этих типов данных.</p> <table class="standard-table"><tbody><tr><td>document </td> <td>Когда член возвращает объект типа document (например, свойство элемента ownerDocument возвращает документ к которому он относится), этот обьект document является собственным корневым обьектом. В DOM document Reference разделе описан объект document.<br> element </td> </tr><tr><td>element </td> <td>обозначает элемент или узел типа element, возвращаемый членом DOM API. Вместо того, чтобы говорить, что метод document.createElement() возвращает ссылку на node, мы просто скажем, что этот элемент возвращает element, который просто был создан в DOM. Объекты element реализуют DOM element интерфейс и также более общий Node интерфейс. Оба интерфейса включены в эту справку.<br> nodeList </td> </tr><tr><td>NodeList </td> <td> <p>массив элементов, как тот, что возвращается методом Document.getElementsByTagName(). Конкретные элементы в массиве доступны по индексу двумя способами:</p> <ul><li>list.item(1)</li> </ul><p>Эти способы эквивалентны. В первом способе item() - единственный метод объекта NodeList. Последний использует обычный синтаксис массивов, чтобы получить второе значение в списке.</p> </td> </tr><tr><td>attribute </td> <td>Когда attribute возвращается членом API (например, метод createAttribute()) - это будет ссылка на объект, который предоставляет специальный (хоть и небольшой) интерфейс для атрибутов. Атрибуты - это узлы в DOM, как и элементы, хотя вы можете редко использовать их в таком виде. </td> </tr><tr><td>namedNodeMap </td> <td>namedNodeMap подобна массиву, но элементы доступны по имени или индексу. Доступ по индексу - это лишь для удобства перечисления, т.к. элементы не имеют определенног порядка в списке. Этот тип данных имеет метод item() для этих целей и вы можете также добавлять и удалять элементы из namedNodeMap </td> </tr></tbody></table><h2>DOM-интерфейсы (DOM interfaces)</h2> <p>Это руководство об объектах и реальных вещах, которые вы можете использовать для управления DOM-иерархией. Есть много моментов, где понимание того, как это работает, может удивлять. Например, объект, представляющий HTML form элемент, берет своё свойство <b>name </b> из интерфейса HTMLFormElement, а свойство <b>className - </b> из интерфейса HTMLElement. В обоих случаях свойство, которое вы хотите, находится в этом объекте формы.</p> <p>Кроме того, отношение между объектами и интерфейсами, которые они реализуют в DOM может быть удивительным и этот раздел пытается рассказать немного о существующих интерфейсах в DOM и о том, как они могут быть доступны.</p> <h3>Интерфейсы и объекты (Interfaces and objects)</h3> <p>Многие объекты реализуют действия из нескольких интерфейсов. Объект таблицы, например, реализует специальный , который включает такие методы как createCaption и insertRow . Но так как это таблица - это ещё и HTML-элемент, table реализует интерфейс Element , описанный в разделе . Наконец, так как HTML-элемент (в смысле DOM) - это узел (node) в дереве, которое составляет объектную модель для HTML- или XML-страницы, табличный элемент также реализует более общий интерфейс Node , из которого происходит Element .</p> <p>Var table = document.getElementById("table"); var tableAttrs = table.attributes; // Node/Element interface for (var i = 0; i < tableAttrs.length; i++) { // HTMLTableElement interface: border attribute if(tableAttrs[i].nodeName.toLowerCase() == "border") table.border = "1"; } // HTMLTableElement interface: summary attribute table.summary = "note: increased border"; </p><h3>Основные интерфейсы в DOM (Core interfaces in the DOM)</h3> <p>Этот раздел перечисляет несколько самых распространенных интерфейсов в DOM. Идея не в том чтобы описать, что делают эти методы API, но в том чтобы дать вам несколько мыслей насчет видов методов и свойств, которые вы будете часто видеть, используя DOM. Эти распространенные части API использованы в большинстве примеров раздела в конце этой справки.</p> <p>Document, window - это объекты, чьи интерфейсы вы, как правило, очень часто используете в программировании DOM. Говоря <a href="https://zhumor.ru/en/internet/iz-chego-sostoit-router-chto-takoe-router-prostymi-slovami-sushchestvuet-tri.html">простыми словами</a>, объект window представляет что-то вроде браузера, а объект document - корень самого документа. Element наследуется от общего интерфейса Node , и эти интерфейсы вместе предоставляют много методов и свойств, которые можно применять у отдельных элементов. Эти элементы также могут иметь отдельные интерфейсы для работы с типами данных, которые эти элементы содержат, как в примере с объектом table в предыдущем случае.</p> <p>Ниже представлен краткий список распространненых членов API, используемых в программировании веб- и XML-страниц с использованием DOM:</p> <ul><li>parentNode.appendChild (node)</li> </ul><h2>Тестирование DOM API</h2> <p>Этот документ содержит примеры для каждого интерфейса, который вы можете использовать в своей разработке. В некоторых случаях примеры - полноценные веб-страницы с доступом к DOM в элементе <script>, также перечислены элементы, необходимые чтобы запустить скрипт в форме, и HTML-элементы, над которыми будут производиться операции DOM. Когда встречается такой случай, можно просто копировать и вставить пример в новый HTML-документ, сохранить и запустить его в браузере.</p> <p>Есть случаи, однако, где примеры более лаконичные. Чтобы запустить примеры, которые лишь демонстрируют основы взаимодействия интерфейсов с HTML-элементами, вы можете подготовить тестовую страницу, в которую будете помещать функции внутрь скриптов. Следующая очень простая веб-страница содержит элемент <script> в заголовке, в который вы можете поместить функции, чтобы протестировать интерфейс. Страница содержит несколько элементов с атрибутами, которые можно возвращать, устанавливать или, другими словами, манипулировать и содержит пользовательский интерфейс, необходимый, чтобы вызывать <a href="https://zhumor.ru/en/internet/nuzhna-li-funkciya-nfc-v-telefone-nfc-tri-zagadochnyh-bukvy-s-kotorymi.html">нужные функции</a> из браузера.</p> <p>Вы можете использовать эту тестовую страницу или похожую для проверки интерфейсов DOM, которые вас интересуют и просмотра того, как они работают в браузерах. Вы можете обновить содержмое функции test() при необходимости, создать больше кнопок или добавить элементы при необходимости.</p> <span>< html </span>> </span> <span>< head </span>> </span> <span>< title </span>> </span> DOM Tests<span></ title </span>> </span> <span>< script </span> type <span>= " application/javascript" </span>> </span> <span>function setBodyAttr (attr, value) { if (document. body) eval ("document.body." + attr+ "="" + value+ """ ) ; else notSupported () ; } </span><span></ script </span>> </span> <span></ head </span>> </span> <span>< body </span>> </span> <span>< div </span><span>style </span>=" <span>margin : .5 in; height : 400 ; </span>" </span>> </span> <span>< p </span>> </span><span>< b </span>> </span><span>< tt </span>> </span> text<span></ tt </span>> </span><span></ b </span>> </span><span></ p </span>> </span> <span>< form </span>> </span> <span>< select </span> onChange <span>= " setBodyAttr(" text" , this.options.value);" </span>> </span> <span>< option </span> value <span>= " black" </span>> </span> black <span>< option </span> value <span>= " darkblue" </span>> </span> darkblue <span></ select </span>> </span> <span>< p </span>> </span><span>< b </span>> </span><span>< tt </span>> </span> bgColor<span></ tt </span>> </span><span></ b </span>> </span><span></ p </span>> </span> <span>< select </span> onChange <span>= " setBodyAttr(" bgColor" , this.options.value);" </span>> </span> <span>< option </span> value <span>= " white" </span>> </span> white <span>< option </span> value <span>= " lightgrey" </span>> </span> gray <span></ select </span>> </span> <span>< p </span>> </span><span>< b </span>> </span><span>< tt </span>> </span> link<span></ tt </span>> </span><span></ b </span>> </span><span></ p </span>> </span> <span>< select </span> onChange <span>= " setBodyAttr(" link" , this.options.value);" </span>> </span> <span>< option </span> value <span>= " blue" </span>> </span> blue <span>< option </span> value <span>= " green" </span>> </span> green <span></ select </span>> </span> <span>< small </span>> </span> <span>< a </span> href <span>= " http://www.brownhen.com/dom_api_top.html" </span> id <span>= " sample" </span>> </span> (sample link)<span></ a </span>> </span><span></ small </span>> </span><span>< br </span>> </span> <span></ form </span>> </span> <span>< form </span>> </span> <span>< input </span> type <span>= " button" </span> value <span>= " version" </span> onclick <span>= " ver()" </span> /> </span> <span></ form </span>> </span> <span></ div </span>> </span> <span></ body </span>> </span> <span></ html </span>> </span> <p>Чтобы протестировать много интерфейсов на одной странице, набор свойств, которые изменяют цвета веб-страницы, можно создать похожую веб-страницу с целой "консолью" кнопок, текстовых полей и других элементов. Следующий скриншот даёт идею, как интерфейсы могут быть сгруппированы вместе для тестирования</p> <p>В этом примере выпадающее меню динамически обновляет доступные из DOM части веб-страницы (например, <a href="https://zhumor.ru/en/internet/kak-zadat-fon-bez-povtoreniya-v-css-background-v-css-color-position-image-repeat.html">фоновый цвет</a>, цвет ссылок и цвет текста). Однако при разработке тестовых страниц, тестирование интерфейсов, как вы об этом прочитали, важная часть изучения эффективной работы с DOM.</p> <p><i>На этом уроке мы рассмотрим, что такое DOM, зачем он нужен, а также то, как он строится. </i></p> <h2>Что такое DOM?</h2> <p>Браузер, когда запрашивает страницу и получает в ответе от сервера её исходный HTML-код, должен сначала его разобрать. В процессе анализа и разбора HTML-кода браузер строит на основе него DOM-дерево .</p> <p>После выполнения этого действия и ряда других браузер приступает к отрисовке страницы. В этом процессе он, конечно, уже использует созданное им DOM-дерево , а не исходный HTML-код.</p> <p>DOM – это объектная модель документа, которую браузер создаёт в памяти компьютера на основании HTML-кода, полученного им от сервера. </p> <p>Если сказать по-простому, то HTML-код – это текст страницы, а DOM – это набор связанных объектов, созданных браузером при парсинге её текста.</p> <p>В Chrome исходный код страницы, который получает браузер, можно посмотреть во вкладке «Source» на панели «Инструменты веб-разработчика».</p> <br><img src='https://i1.wp.com/itchief.ru/assets/images/javascript/dom/2.png' width="100%" loading=lazy loading=lazy><p>В Chrome инструмента, с помощью которого можно было бы посмотреть созданное им DOM-дерево нет. Но есть представление этого DOM-дерева в виде HTML-кода, оно доступно на вкладке «Elements». С таким представлением DOM веб-разработчику, конечно, намного удобнее работать. Поэтому инструмента, который DOM представлял бы в виде древовидной структуры нет.</p> <br><img src='https://i1.wp.com/itchief.ru/assets/images/javascript/dom/3.png' width="100%" loading=lazy loading=lazy><p>Объекты в этой модели образуются практически из всего, что есть в HTML (тегов, текстового контента, комментариев и т.д.), включая при этом сам документ. Связи между этими объектами в модели формируются на основании того, как <span>HTML-элементы расположены в коде относительно друг друга </span>.</p> <p>При этом DOM документа после его формирования можно изменять . При изменении DOM браузер практически мгновенно перерисовывает изображение страницы. В результате у нас <span>отрисовка страницы всегда соответствует DOM </span>.</p> <p>Для чтения и изменения DOM программно браузер предоставляет нам DOM API или, другими словами, программный интерфейс. По-простому DOM API – это набор огромного количества различных объектов, их свойств и методов, которые мы можем использовать для <span>чтения и изменения DOM </span>.</p> <p>Для работы с DOM в большинстве случаев используется JavaScript, т.к. на сегодняшний день это единственный язык программирования, скрипты на котором могут выполняться в браузере.</p> <p>Зачем нам нужен DOM API? </span> Он нам нужен для того, чтобы мы могли с <a href="https://zhumor.ru/en/internet/zagruzka-faila-na-server-s-pomoshchyu-javascript-i-biblioteki-jquery-zagruzka.html">помощью JavaScript</a> изменять страницу на «лету», т.е. делать её динамической и интерактивной.</p> <p>DOM API предоставляет нам (разработчикам) огромное количество методов, с помощью которых мы можем менять всё что есть на странице, а также взаимодействовать с пользователем. Т.е. данный программный интерфейс позволяет нам создавать сложные интерфейсы, формы, выполнять обработку действий пользователей, добавлять и удалять различные элементы на странице, изменять их содержимое, свойства (атрибуты), и многое другое.</p> <p>Сейчас в вебе практически нет сайтов в сценариях которых отсутствовала бы работа с DOM.</p> <h2>Из чего состоит HTML-код страницы?</h2> <p>Перед тем, как перейти к изучению объектной модели документа необходимо сначала вспомнить, что из себя представляет исходный код веб-страницы (HTML-документа).</p> <p>Исходный код веб-страницы состоит из тегов, атрибутов, комментариев и текста. Теги - это базовая синтаксическая конструкция HTML. Большинство из них являются парными. В этом случае один из них является открывающим, а другой – закрывающим. Одна такая пара тегов образует HTML-элемент. HTML-элементы могут иметь дополнительные параметры – атрибуты.</p> <p>В документе для создания определённой разметки одни элементы находятся внутри других. В результате HTML-документ можно представить как множество вложенных друг в друга HTML-элементов.</p> <p>В качестве примера рассмотрим <a href="https://zhumor.ru/en/computer/napisat-kod-html-sleduyushchei-tablicy.html">следующий HTML</a> код:</p><p> <html> <head> <title>Заголовок страницы

Название статьи

Раздел статьи

Содержимое статьи

В этом коде корневым элементом является html . В него вложены элементы head и body . Элемент head содержит title , а body – h1 и div . Элемент div в свою очередь содержит h2 и p .

Теперь рассмотрим, как браузер на основании HTML-кода строит DOM-дерево.

Как строится DOM-дерево документа?

Как уже было описано выше браузер строит дерево на основе HTML-элементов и других сущностей исходного кода страницы. При выполнении этого процесса он учитывает вложенность элементов друг в друга.

В результате браузер полученное DOM-дерево использует не только в своей работе, но также предоставляет нам API для удобной работы с ним через JavaScript.

При строительстве DOM браузер создаёт из HTML-элементов, текста, комментариев и других сущностей этого языка объекты (узлы DOM-дерева).

В большинстве случаев веб-разработчиков интересуют только объекты (узлы), образованные из HTML-элементов.

При этом браузер не просто создаёт объекты из HTML-элементов, а также связывает их между собой определёнными связями в зависимости от того, как каждый из них относится к другому в коде.

Элементы, которые находятся непосредственно в некотором элементе являются по отношению к нему детьми. А он для каждого из них является родителем. Кроме этого, все эти элементы по отношению друг к другу являются сиблингами (братьями).

При этом в HTML любой элемент всегда имеет одного родителя (HTML-элемент, в котором он непосредственно расположен). В HTML у элемента не может быть несколько родителей. Исключение составляет только элемент html . У него нет родителя.

Чтобы получить DOM-дерево так как его строит браузер, необходимо просто «выстроить» все элементы в зависимости от их отношения друг к другу.

Создание DOM-дерева выполняется сверху вниз.

При этом корнем DOM-дерева всегда является сам документ (узел document). Далее дерево строится в зависимости от структуры HTML кода.

Например, HTML-код, который мы рассматривали выше будет иметь следующее DOM-дерево:


В самом верху этого дерева находится узел document . Данный узел связан с html , он является его ребёнком. Узел html образован элементом html (...). Узлы head (...) и body (...) имеют родительскую связь с html . По отношению друг ту другу они являются сиблингами, т.к. имеют одного родителя. Узел head связан с title (lt;title>...), он является его ребёнком. Узлы h1 и div связаны с body , для них он является родителем. Узел div связан с h2 (

...

) и p (), они являются его детьми.

Начинается дерево как было уже отмечено выше с объекта (узла) document . Он в свою очередь имеет один дочерний узел, образованный элементом html (...). Элементы head (...) и body (...) находятся в html и, следовательно, являются его детьми. Далее узел head является родительским для title (lt;title>...). Элементы h1 и div вложены в body , значит они являются его детьми. В div непосредственно расположены элементы h2 (

...

) и p (). Это значит, что узел div для каждого из них является родительским.

Вот так просто строится DOM-дерево в браузере на основании HTML-кода.

Зачем нужно знать, как строится DOM дерево? Во-первых, это понимание той среды, в которой вы хотите что-то изменять. Во-вторых, большинство действий при работе с DOM сводится к поиску (выбору) нужных элементов. Не зная как устроено DOM-дерево и связи между узлами найти какой-то определенный элемент в нём будет достаточно затруднительно.

Задание

На основе DOM-дерева, представленного на рисунке, создайте HTML-код.


Работа с DOM-моделью

Каждый объект Window имеет свойство document , ссылающееся на объект Document. Этот объект Document не является автономным объектом. Он является центральным объектом обширного API, известного как объектная модель документа (DOM), который определяет порядок доступа к содержимому документа.

Обзор модели DOM

Объектная модель документа (Document Object Model, DOM) - это фундаментальный прикладной программный интерфейс, обеспечивающий возможность работы с содержимым HTML и XML-документов. Прикладной программный интерфейс (API) модели DOM не особенно сложен, но в нем существует множество архитектурных особенностей, которые вы должны знать.

Прежде всего, следует понимать, что вложенные элементы HTML или XML-документов представлены в виде дерева объектов DOM. Древовидное представление HTML-документа содержит узлы, представляющие элементы или теги, такие как и

И узлы, представляющие строки текста. HTML-документ также может содержать узлы, представляющие HTML-комментарии. Рассмотрим следующий простой HTML-документ:

Пример документа

Это HTML-документ

Пример простого текста.

DOM-представление этого документа приводится на следующей диаграмме:

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

Каждый прямоугольник на этой диаграмме является узлом документа, который представлен объектом Node . Обратите внимание, что на рисунке изображено три различных типа узлов. Корнем дерева является узел Document, который представляет документ целиком. Узлы, представляющие HTML-элементы, являются узлами типа Element, а узлы, представляющие текст, - узлами типа Text. Document, Element и Text - это подклассы класса Node. Document и Element являются двумя самыми важными классами в модели DOM.

Тип Node и его подтипы образуют иерархию типов, изображенную на диаграмме ниже. Обратите внимание на формальные отличия между обобщенными типами Document и Element, и типами HTMLDocument и HTMLElement. Тип Document представляет HTML и XML-документ, а класс Element представляет элемент этого документа. Подклассы HTMLDocument и HTMLElement представляют конкретно HTML-документ и его элементы:

На этой диаграмме следует также отметить наличие большого количества подтипов класса HTMLElement, представляющих конкретные типы HTML-элементов. Каждый из них определяет JavaScript-свойства, отражающие HTML-атрибуты конкретного элемента или группы элементов. Некоторые из этих специфических классов определяют дополнительные свойства или методы, которые не являются отражением синтаксиса языка разметки HTML.

Выбор элементов документа

Работа большинства клиентских программ на языке JavaScript так или иначе связана с манипулированием элементами документа. В ходе выполнения эти программы могут использовать глобальную переменную document, ссылающуюся на объект Document. Однако, чтобы выполнить какие-либо манипуляции с элементами документа, программа должна каким-то образом получить, или выбрать, объекты Element, ссылающиеся на эти элементы документа. Модель DOM определяет несколько способов выборки элементов. Выбрать элемент или элементы документа можно:

    по значению атрибута id;

    по значению атрибута name;

    по имени тега;

    по имени класса или классов CSS;

    по совпадению с определенным селектором CSS.

Все эти приемы выборки элементов описываются в следующих подразделах.

Выбор элементов по значению атрибута id

Все HTML-элементы имеют атрибуты id. Значение этого атрибута должно быть уникальным в пределах документа - никакие два элемента в одном и том же документе не должны иметь одинаковые значения атрибута id. Выбрать элемент по уникальному значению атрибута id можно с помощью метода getElementById() объекта Document:

Var section1 = document.getElementById("section1");

Это самый простой и самый распространенный способ выборки элементов. Если сценарию необходимо иметь возможность манипулировать каким-то определенным множеством элементов документа, присвойте значения атрибутам id этих элементов и используйте возможность их поиска по этим значениям.

В версиях Internet Explorer ниже IE8 метод getElementById() выполняет поиск значений атрибутов id без учета регистра символов и, кроме того, возвращает элементы, в которых будет найдено совпадение со значением атрибута name.

Выбор элементов по значению атрибута name

HTML-атрибут name первоначально предназначался для присваивания имен элементам форм, и значение этого атрибута использовалось, когда выполнялась отправка данных формы на сервер. Подобно атрибуту id, атрибут name присваивает имя элементу. Однако, в отличие от id, значение атрибута name не обязано быть уникальным: одно и то же имя могут иметь сразу несколько элементов, что вполне обычно при использовании в формах радиокнопок и флажков. Кроме того, в отличие от id, атрибут name допускается указывать лишь в некоторых HTML-элементах, включая формы, элементы форм и элементы