English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
HTMLDOMпозволяетJavaScriptперемещатьсявдеревеузловс помощьюотношенийузлов.
СогласностандартуW3CHTMLDOM,всесодержаниеHTMLдокументаявляетсяузлом:
Всёдокументявляетсяузломдокумента
КаждыйHTMLэлементявляетсяузломэлемента
ТекствнутриHTMLэлементавыявляетсяузломтекста
КаждаяHTMLсвойствоявляетсяузломсвойства(неrecommended)
Всеannotaciiявляютсяузламиannotacii(неrecommended)
ИспользуяHTML DOM, можнодоступитьквсимузламдереваноделовс помощьюJavaScript.
Можновыполнятьсозданиеновыхузловиизменениеилиудалениевсехузлов.
Узлывдеревеузловимеютиерархическиеотношения.
Термины“родитель”,“ребенок”и“братьяисестры”используютсядляописанияотношений.
Вдеревеузловверхнийузелназываетсякорнем(иликорневымузлом)
Укаждогоузлаестьодинродителькромекорневогоузла(укорневогоузланетродителя)
Уузламожетбытьнесколькоподузлов
Братьяисестры(братьяисестры)являютсяузламисодинаковымродителем
<html> <head> <title>DOM Tutorial</title> </head> <h1>DOM Nodes</h1> <p>Hello, World</p> </html>
ИзвышеприведенногоHTMLвамможночитать:
<html>являетсякорневымузломинеимеетродителя
<html>являетсяродителем<head>и<body>
<head>являетсяпервымребенком<html>
<body>являетсяпоследнимребенком<html>
и:
<head>имеетодногоребенка:<title>
<title>имеетодногоребенка(одинтекстовыйузел):“ DOM Tutorial”
<body>имеетдвохдетей:<h1>и<p>
<h1>имеет ребенка (текстовый узел): «DOM Nodes»
<p>имеет ребенка (текстовый узел): «Hello, world»
<h1>и<p>являются однородными
Вы можете использовать следующие свойства узлов для навигации между узлами с JavaScript:
Вы можете использоватьfirstChildСвойства DOM-узла для доступа к первому прямому подузлу узла.
<p id="para"> <span>Первый span</span> <b>Первый полужирный</b> </p> <script> var para = document.getElementById("para"); alert(para.firstElementChild.nodeName); // возвращает SPAN </script>Проверьте, чтобы увидеть <‹/›>
Примечание:В предыдущем примере, вывод будет:#text,Потому что текстовый узел вставлен для поддержания пробелов между маркерами.#textузел, от одного пробела до нескольких пробелов, табуляций и т.д.
Но, если удалить пробелы, они не будут вставлены#textузел, и элемент span станет первым подузлом абзаца:
<p id="para"><span>Первый span</span> <b>Первый полужирный</b></p> <script> var para = document.getElementById("para"); alert(para.firstChild.nodeName); // возвращает SPAN </script>Тестировать, чтобы увидеть‹/›
Доступ к первому ребенку можно также выполнить следующим образом:
para.childNodes[0].nodeName; // возвращает SPANТестировать, чтобы увидеть‹/›
Вы можете использоватьlastChildСвойства DOM-узла для доступа к последнему прямому подузлу узла.
para.lastChild.nodeName; // возвращает BТестировать, чтобы увидеть‹/›
Чтобы избежать возникновения#textили#commentНodusfirstChildиlastChildВы можете выбрать один из следующих вариантов для решения этой проблемы:
firstElementChildСвойство возвращает первый подузел заданного родительского элемента.
<p id="para"> <span>Первый span</span> <b>Первый полужирный</b> </p> <script> var para = document.getElementById("para"); alert(para.firstElementChild.nodeName); // возвращает SPAN </script>Тестировать, чтобы увидеть‹/›
lastElementChildСвойство возвращает последний подузел заданного родительского элемента.
<p id="para"> <span>Первый span</span> <b>Первый полужирный</b> </p> <script> var para = document.getElementById("para"); alert(para.lastElementChild.nodeName); // возвращает B </script>Тестировать, чтобы увидеть‹/›
Примечание:ЭтотnodeNameЭто только чтение свойство, возвращающее имя текущего узла в виде строки.
Вы можете использоватьparentNodeСвойство позволяет обращаться к родительскому узлу в DOM-дереве.
<div> <p>Это первый абзац DIV</p> <p id="para">This is second P inside DIV</p> <p>This is third P inside DIV</p> </div> <script> var para = document.getElementById("para"); alert(para.parentNode.nodeName); // возвращает DIV </script>Тестировать, чтобы увидеть‹/›
Вы также можете использоватьparentElementАтрибут возвращает родительский элемент элемента.
Вы можете использоватьpreviousSiblingиnextSiblingАтрибут позволяет получить доступ к предыдущему и следующему узлам в DOM-дереве.
<div id="div-1">Here is div-1</div> <div id="div-2">Here is div-2</div> <div id="div-3">Here is div-3</div> <script> var x = document.querySelector("#div-2"); alert(x.previousSibling.nodeName); alert(x.nextSibling.nodeName); </script>Тестировать, чтобы увидеть‹/›
Или, вы можете использоватьpreviousElementSiblingиnextElementSiblingЧтобы пропустить любые пустые текстовые узлы и получить предыдущий и следующий элементы同级.
<div id="div-1">Here is div-1</div> <div id="div-2">Here is div-2</div> <div id="div-3">Here is div-3</div> <script> var x = document.querySelector("#div-2"); alert(x.previousElementSibling.textContent); alert(x.nextElementSibling.textContent); </script>Тестировать, чтобы увидеть‹/›
textContentАтрибут представляет текстовое содержимое узла.
Следующие два атрибута позволяют получить доступ ко всему документу:
document.bodyАтрибут устанавливает или возвращает элемент.
<!DOCTYPE html> <html> <p>Hello, World!</p> <div> <p>Корневой узел DOM</p> <p>Атрибут document.body устанавливает или возвращает элемент body документа.</p> </div> <script> alert(document.body.innerHTML); </script> </html>Тестировать, чтобы увидеть‹/›
document.documentElementАтрибут возвращает документ.<html>Элемент.
<!DOCTYPE html> <html> <p>Hello, World!</p> <div> <p>Корневой узел DOM</p> <p>Атрибут document.documentElement возвращает корневой элемент документа.</p> </div> <script> alert(document.documentElement.innerHTML); </script> </html>Тестировать, чтобы увидеть‹/›
nodeTypeСвойство возвращает тип узла в цифровом виде.
var x = document.getElementById("myPara").nodeType;Тестировать, чтобы увидеть‹/›
DOM-дерево состоит из узлов различных типов, таких как элементы, текст, комментарии и т.д.
У каждого узла естьnodeTypeАтрибуты, используемые для поиска типов узлов, подлежащих обработке.
В таблице перечислены основные типы узлов:
Нodus | Тип | Пример |
---|---|---|
ELEMENT_NODE | 1 шт. | <p class="heading">Привет, мир</p> |
ATTRIBUTE_NODE | 2 | class =“heading”(не рекомендуется использовать) |
TEXT_NODE | 3 | Привет, мир |
COMMENT_NODE | 8 | <!--Это комментарий--> |
DOCUMENT_NODE | 9 | Сам документ HTML (родитель <html>) |
DOCUMENT_TYPE_NODE | 10 | <!doctype html> |