Я полностью запутался между объектом Node и объектом Element.
document.getElementById()
возвращает объект Element, в то время как document.getElementsByClassName()
возвращает объект NodeList (коллекция элементов или узлов?)
Если div - это объектный элемент, то как насчет div-объекта Node?
Что такое объект узла?
Являются ли объект документа, объект элемента и текстовый объект также объектом Node?
Согласно книге Дэвида Фланагана «Объект документа, его элементы и текстовые объекты являются объектами узла».
Так почему же объект может наследовать свойства / методы объекта Element, а также объекта Node?
Если да, я думаю, что Node Class и Element Class связаны в прототипе дерева наследования.
<div id="test">
<p class="para"> 123 </p>
<p class="para"> abc </p>
</div>
<p id="id_para"> next </p>
document.documentElement.toString(); // [object HTMLHtmlElement]
var div = document.getElementById("test");
div.toString(); // [object HTMLDivElement]
var p1 = document.getElementById("id_para");
p1.toString(); // [object HTMLParagraphElement]
var p2 = document.getElementsByClassName("para");
p2.toString(); //[object HTMLCollection]
Ответы:
A
node
- это общее имя для любого типа объекта в иерархии DOM. Anode
может быть одним из встроенных элементов DOM, таких какdocument
илиdocument.body
, это может быть тег HTML, указанный в HTML, такой как<input>
или,<p>
или это может быть текстовый узел, который создается системой для хранения блока текста внутри другого элемента. , Итак, в двух словах, этоnode
любой объект DOM.Это
element
один конкретный тип,node
поскольку существует много других типов узлов (текстовые узлы, узлы комментариев, узлы документов и т. Д.).DOM состоит из иерархии узлов, где каждый узел может иметь родителя, список дочерних узлов, а также nextSibling и previousSibling. Эта структура образует древовидную иерархию. У
document
узла будет свой список дочерних узлов (head
узел иbody
узел). Уbody
узла будет свой список дочерних узлов (элементов верхнего уровня на вашей HTML-странице) и так далее.Итак, a
nodeList
- это просто список, похожий на массивnodes
.Элемент - это определенный тип узла, который может быть непосредственно указан в HTML с помощью тега HTML и может иметь свойства, такие как
id
илиclass
. может иметь детей и т. д. Существуют другие типы узлов, такие как узлы комментариев, текстовые узлы и т. д. с другими характеристиками. У каждого узла есть свойство,.nodeType
которое сообщает, какой это тип узла. Вы можете увидеть различные типы узлов здесь (диаграмма из MDN ):Вы можете видеть, что
ELEMENT_NODE
это один конкретный тип узла, гдеnodeType
свойство имеет значение1
.Таким образом,
document.getElementById("test")
можно вернуть только один узел, и он гарантированно будет элементом (узлом определенного типа). Из-за этого он просто возвращает элемент, а не список.Поскольку
document.getElementsByClassName("para")
может возвращать более одного объекта, дизайнеры решили вернуть a,nodeList
потому что это тип данных, который они создали для списка из более чем одного узла. Так как это могут быть только элементы (только элементы обычно имеют имя класса), технически онnodeList
имеет только узлы типа элемента в нем, и дизайнеры могли создать коллекцию с другим именем, которая былаelementList
, но они решили использовать только один тип коллекции, имеет ли она только элементы или нет.РЕДАКТИРОВАТЬ: HTML5 определяет,
HTMLCollection
который является списком элементов HTML (не любой узел, только элементы). Ряд свойств или методов в HTML5 теперь возвращаютHTMLCollection
. Хотя он очень похож по интерфейсу на anodeList
, теперь делается различие в том, что он содержит только элементы, а не какой-либо тип узла.Различие между a
nodeList
и anHTMLCollection
мало влияет на то, как вы его используете (насколько я могу судить), но разработчики HTML5 уже сделали это различие.Например,
element.children
свойство возвращает активную коллекцию HTMLCollection.источник
Node
для реализации древовидной структуры, так что его методы дляfirstChild
,lastChild
,childNodes
и т.д. Это более одного класса для общей структуры дерева.И затем, некоторые
Node
объекты также являютсяElement
объектами.Element
наследует отNode
.Element
Объекты фактически представляют объекты, указанные в файле HTML с помощью тегов, таких как<div id="content"></div>
.Element
Класса определяют свойства и методы , такие какattributes
,id
,innerHTML
,clientWidth
,blur()
, иfocus()
.Некоторые
Node
объекты являются текстовыми узлами и не являютсяElement
объектами. У каждогоNode
объекта естьnodeType
свойство, указывающее тип узла для документов HTML:Мы можем увидеть некоторые примеры в консоли:
Последняя строка выше показывает, что
Element
наследуется отNode
. (эта строка не будет работать в IE из-за__proto__
. Нужно будет использовать Chrome, Firefox или Safari).Кстати,
document
объект является вершиной дерева узлов иdocument
являетсяDocument
объектом, а такжеDocument
наследуется отNode
:Вот несколько документов для классов Node и Element:
https://developer.mozilla.org/en-US/docs/DOM/Node
https://developer.mozilla.org/en-US/docs/DOM/Element
источник
<span data-a="1" >123</span>
? этот диапазон является элементом, который имеет свой собственный узел. но у атрибута также есть свой собственный узел?Лучший источник информации для всех ваших проблем DOM
http://www.w3.org/TR/dom/#nodes
«Объекты, реализующие интерфейс Document, DocumentFragment, DocumentType, Element, Text, ProcessingInstruction или Comment (просто называемые узлами), участвуют в дереве».
http://www.w3.org/TR/dom/#element
«Узлы элементов просто известны как элементы».
источник
Узел: http://www.w3schools.com/js/js_htmldom_nodes.asp
Объект Node представляет отдельный узел в дереве документа. Узлом может быть узел элемента, узел атрибута, текстовый узел или любой другой тип узла, описанный в главе «Типы узлов».
Элемент: http://www.w3schools.com/js/js_htmldom_elements.asp
Объект Element представляет элемент в документе XML. Элементы могут содержать атрибуты, другие элементы или текст. Если элемент содержит текст, текст представляется в текстовом узле.
дубликат:
источник
Узел используется для представления тегов в целом. Делится на 3 типа:
Атрибут Примечание: это узел, который внутри имеет свои атрибуты. Опыт:
<p id=”123”></p>
Текстовый узел: это узел, который между открытием и закрытием имеет контекстное текстовое содержимое. Опыт:
<p>Hello</p>
Элемент Node: это узел, внутри которого есть другие теги. Опыт:
<p><b></b></p>
Каждый узел может быть типами одновременно, не обязательно только одного типа.
Элемент - это просто элементный узел.
источник