С помощью HTML DOM вы можете перемещаться по дереву узлов, используя node отношения.
Согласно стандарту W3C HTML DOM, все в документе HTML является узлом:
Весь документ является узлом документа
Каждый элемент HTML является узлом элемента.
Текст внутри HTML-элементов представляет собой текстовые узлы.
Каждый атрибут HTML является узлом атрибута (устарело).
Все комментарии являются узлами комментариев.
Благодаря HTML DOM ко всем узлам дерева узлов можно получить доступ с помощью JavaScript.
Могут быть созданы новые узлы, и все узлы могут быть изменены или удалены.
Узлы в дереве узлов имеют иерархическую связь друг с другом.
Термины «родитель», «потомок» и «брат» используются для описания отношений.
В дереве узлов верхний узел называется корнем (или корневым узлом).
Каждый узел имеет ровно одного родителя, кроме корня (у которого нет родителя).
Узел может иметь несколько дочерних элементов
Братья и сестры (братья или сестры) — это узлы с одним и тем же родителем.
<html>
<head>
<title>DOM Tutorial</title>
</head>
<body>
<h1>DOM Lesson one</h1>
<p>Hello world!</p>
</body>
</html>
Из приведенного выше HTML вы можете прочитать:
<html> — корневой узел.
<html> не имеет родителей
<html> является родительским для <head> и < тело>
<head> — первый дочерний элемент <html>
<body> — последний дочерний элемент <html>
и :
У <head> есть один дочерний элемент: <title>
<title> имеет один дочерний элемент (текстовый узел): "DOM Tutorial".
У <body> есть два дочерних элемента: <h1> и < р>
<h1> имеет один дочерний элемент: "Урок DOM первый"
У <p> есть один дочерний элемент: "Привет, мир!"
<h1> и <p> являются братьями и сестрами
Вы можете использовать следующие свойства узла для навигации между узлами с помощью JavaScript:
parentNode
childNodes[номер узла]
firstChild
lastChild
nextSibling
предыдущий брат
Распространенной ошибкой при обработке DOM является ожидание, что узел элемента будет содержать текст.
<title
id="demo">DOM Tutorial</title>Узел элемента <title> (в примере выше) не содержит текст.
Он содержит текстовый узел со значением «DOM Tutorial».
Доступ к значению текстового узла можно получить с помощью свойства innerHTML узла:
myTitle = document.getElementById("demo").innerHTML;Доступ к свойству InnerHTML аналогичен доступу к nodeValue. первого ребенка:
myTitle = document.getElementById("demo").firstChild.nodeValue;Доступ к первому дочернему элементу также можно выполнить следующим образом:
myTitle = document.getElementById("demo").childNodes[0].nodeValue;Все (3) следующих примера извлекают текст элемента <h1> и копируют его. в элемент <p>:
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML
= document.getElementById("id01").innerHTML;
</script>
</body>
</html>Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").innerHTML;
</script>
</body>
</html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").firstChild.nodeValue;
</script>
</body>
</html>Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").firstChild.nodeValue;
</script>
</body>
</html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02">Hello!</p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").childNodes[0].nodeValue;
</script>
</body>
</html>Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").childNodes[0].nodeValue;
</script>
</body>
</html>
В этом уроке мы используем свойство InnerHTML для получения содержимого HTML-элемент.
Однако обучение другие методы, описанные выше, полезны для понимания древовидной структуры и навигация по DOM.
Есть два специальных свойства, которые позволяют получить доступ ко всему документу:
document.body — тело документа.
document.documentElement — полный документ
<html>
<body>
<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.body</p>
<p
id="demo"></p>
<script>
document.getElementById("demo").innerHTML
= document.body.innerHTML;
</script>
</body>
</html>Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.body</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = document.body.innerHTML;
</script>
</body>
</html>
<html>
<body>
<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.documentElement</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML =
document.documentElement.innerHTML;
</script>
</body>
</html>Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript HTMLDOM</h2>
<p>Displaying document.documentElement</p>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = document.documentElement.innerHTML;
</script>
</body>
</html>
Свойство nodeName указывает имя узла.
имя_узла доступно только для чтения.
nodeName узла элемента совпадает с именем тега
nodeName узла атрибута — это имя атрибута.
nodeName текстового узла всегда #text
nodeName узла документа всегда #document
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML
= document.getElementById("id01").nodeName;
</script>Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").nodeName;
</script>
</body>
</html>
Примечание. nodeName всегда содержит имя тега элемента HTML в верхнем регистре.
Свойство nodeValue определяет значение узла.
nodeValue для узлов элементов равно null
nodeValue для текстовых узлов — это сам текст
nodeValue для узлов атрибутов — это значение атрибута.
Свойство nodeType доступно только для чтения. Он возвращает тип узла.
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML
= document.getElementById("id01").nodeType;
</script>Попробуйте сами →
<!DOCTYPE html>
<html>
<body>
<h1 id="id01">My First Page</h1>
<p id="id02"></p>
<script>
document.getElementById("id02").innerHTML = document.getElementById("id01").nodeType;
</script>
</body>
</html>
Наиболее важными свойствами nodeType являются:
| Node | Type | Example |
|---|---|---|
| ELEMENT_NODE | 1 | <h1 class="heading">W3Schools</h1> |
| ATTRIBUTE_NODE | 2 | class = "heading" (deprecated) |
| TEXT_NODE | 3 | W3Schools |
| COMMENT_NODE | 8 | <!-- This is a comment --> |
| DOCUMENT_NODE | 9 | The HTML document itself (the parent of <html>) |
| DOCUMENT_TYPE_NODE | 10 | <!Doctype html> |
Тип 2 устарел в HTML DOM (но работает). Он не устарел в XML DOM.