Node 객체와 Element 객체가 완전히 혼동됩니다.
NodeList document.getElementById()
객체를 document.getElementsByClassName()
반환 하는 동안 Element 객체를 반환합니다 (Element 또는 Nodes의 컬렉션?)
div가 요소 객체라면 div 노드 객체는 어떻습니까?
노드 객체 란 무엇입니까?
문서 객체, 요소 객체 및 텍스트 객체도 노드 객체입니까?
David Flanagan의 책 ‘문서 객체, 요소 객체 및 텍스트 객체는 모두 노드 객체’입니다.
그렇다면 어떻게 객체가 Node 객체뿐만 아니라 Element 객체의 속성 / 메소드를 상속받을 수 있습니까?
그렇다면 노드 클래스와 요소 클래스가 프로토 타입 상속 트리와 관련이 있다고 생각합니다.
<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 계층에서 모든 유형의 객체에 대한 일반 이름입니다. A node
는 document
or 와 같은 내장 DOM 요소 중 하나 일 document.body
수 있으며, HTML과 같은 HTML에 지정된 HTML 태그 <input>
이거나 <p>
다른 요소 내에 텍스트 블록을 보유하기 위해 시스템에 의해 작성된 텍스트 노드 일 수 있습니다. . 간단히 말해 a node
는 모든 DOM 객체입니다.
A element
는 node
다른 많은 유형의 노드 (텍스트 노드, 주석 노드, 문서 노드 등) 가 있기 때문에 하나의 특정 유형입니다 .
DOM은 각 노드가 부모, 자식 노드 목록 및 nextSibling 및 previousSibling을 가질 수있는 노드 계층으로 구성됩니다. 이 구조는 나무와 같은 계층 구조를 형성합니다. document
노드는 자식 노드 (의 명단 것이다 head
노드와 body
노드). body
노드는 등등 자식 노드 (HTML 페이지에서 최상위 레벨 요소)과의 목록을 가질 것이다.
따라서 a nodeList
는 단순히 배열과 같은 목록입니다 nodes
.
요소는 특정 유형의 노드로, HTML 태그를 사용하여 HTML에 직접 지정할 수 있으며 an id
또는 a 와 같은 속성을 가질 수 있습니다 class
. 자식 등을 가질 수 있습니다 … 다른 특성을 가진 주석 노드, 텍스트 노드 등과 같은 다른 유형의 노드가 있습니다. 각 노드에는 노드 .nodeType
유형을보고 하는 속성 이 있습니다. 여기에서 다양한 유형의 노드를 볼 수 있습니다 ( MDN의 다이어그램 ).
특성 값이 인 ELEMENT_NODE
특정 노드 유형 중 하나를 볼 수 있습니다 .nodeType
1
따라서 document.getElementById("test")
하나의 노드 만 반환 할 수 있으며 요소 (특정 유형의 노드)가 보장됩니다. 이 때문에 목록이 아닌 요소 만 반환합니다.
이후 document.getElementsByClassName("para")
하나 개 이상의 객체를 반환 할 수 있습니다, 디자이너가를 반환하기로 결정했습니다 nodeList
즉 그들은 더 이상의 노드의 목록을 만든 데이터 타입이기 때문에. 이것들은 요소 일 수 있기 때문에 (요소 만 일반적으로 클래스 이름을 가짐) 기술적으로는 nodeList
요소 유형의 노드 만 가지고 있으며 디자이너는 다른 이름의 컬렉션을 만들 수 elementList
있지만 유형은 하나만 사용하도록 선택했습니다 컬렉션에 요소 만 포함되어 있는지 여부
편집 : HTML5는 HTMLCollection
HTML 요소 (노드가 아닌 요소 만)의 목록을 정의합니다 . HTML5의 여러 속성 또는 메서드는 이제을 반환합니다 HTMLCollection
. 인터페이스는 인터페이스와 매우 유사하지만 nodeList
노드 유형이 아닌 요소 만 포함한다는 점이 구별됩니다.
a nodeList
와 a의 구별은 HTMLCollection
(내가 말할 수있는 한) 사용 방법에 거의 영향을 미치지 않지만 HTML5의 디자이너는 이제 그 구별을했습니다.
예를 element.children
들어이 속성은 라이브 HTMLCollection을 반환합니다.
답변
Node
트리 구조를 구현하기위한, 그래서 그 방법을위한 firstChild
, lastChild
, childNodes
, 등 그것은 일반적인 트리 구조에 대한 더 많은 클래스입니다.
그런 다음 일부 Node
객체도 Element
객체입니다. Element
에서 상속 Node
합니다. Element
objects는 실제로 HTML 파일에 지정된 것과 같은 태그를 사용하여 객체를 나타냅니다 <div id="content"></div>
. Element
클래스는 속성과 같은 방법을 정의 attributes
, id
, innerHTML
, clientWidth
, blur()
,와 focus()
.
일부 Node
객체는 텍스트 노드이며 Element
객체 가 아닙니다 . 각 Node
객체에는 nodeType
HTML 문서의 노드 유형을 나타내는 속성이 있습니다.
1: Element node
3: Text node
8: Comment node
9: the top level node, which is document
콘솔에서 몇 가지 예를 볼 수 있습니다.
> document instanceof Node
true
> document instanceof Element
false
> document.firstChild
<html>...</html>
> document.firstChild instanceof Node
true
> document.firstChild instanceof Element
true
> document.firstChild.firstChild.nextElementSibling
<body>...</body>
> document.firstChild.firstChild.nextElementSibling === document.body
true
> document.firstChild.firstChild.nextSibling
#text
> document.firstChild.firstChild.nextSibling instanceof Node
true
> document.firstChild.firstChild.nextSibling instanceof Element
false
> Element.prototype.__proto__ === Node.prototype
true
위의 마지막 줄은에서 Element
상속받은 것을 보여줍니다 Node
. (이 줄은로 인해 IE에서 작동하지 않습니다 __proto__
. Chrome, Firefox 또는 Safari를 사용해야합니다.)
그런데, document
객체는 노드 트리의 상단이며, document
A는 Document
객체와 Document
의 상속 Node
뿐만 아니라 :
> Document.prototype.__proto__ === Node.prototype
true
다음은 Node 및 Element 클래스에 대한 몇 가지 문서입니다.
https://developer.mozilla.org/en-US/docs/DOM/Node
https://developer.mozilla.org/en-US/docs/DOM/Element
답변
모든 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>
텍스트 노드 : 시작과 끝 사이에 contian 텍스트 내용이있는 노드입니다. 특급 :<p>Hello</p>
Element Node : 내부에 다른 태그가있는 노드입니다. 특급 :<p><b></b></p>
각 노드는 단일 유형일 필요는 없으며 동시에 유형일 수도 있습니다.
요소는 단순히 요소 노드입니다.