Answers:
了解这.children
是Element的属性。1只有Elements具有.children
,并且这些子元素都是Element类型的。2
但是,这.childNodes
是Node的属性。.childNodes
可以包含任何节点。3
一个具体的例子是:
let el = document.createElement("div");
el.textContent = "foo";
el.childNodes.length === 1; // Contains a Text node child.
el.children.length === 0; // No Element children.
大多数情况下,您想使用它,.children
因为通常您不想在DOM操作中遍历Text或Comment节点。
如果确实要操作“文本”节点,则可能需要.textContent
替代。4
1.从技术上讲,它是ParentNode的属性,Element所包含的mixin。
2.它们都是元素,因为.children
是HTMLCollection,只能包含元素。
3.同样,.childNodes
可以容纳任何节点,因为它是NodeList。
4.或者.innerText
。在此处或此处查看差异。
.children
XML文档:jsfiddle.net/fbwbjvch/1
Element.children
仅返回元素子代,而Node.childNodes
返回所有节点子代。请注意,元素是节点,因此两者在元素上均可用。
我相信childNodes
是更可靠的。例如,MDC(在上面链接)指出IE仅children
在IE 9中正确 childNodes
。
.children
不会过滤掉注释节点,但是会过滤掉文本节点。
.getElementsByTagName('*')
。有时IE可能会令人讨厌...
children
支持IE的shim / polyfill实现。
到目前为止,很好的答案是,我只想补充一点,您可以使用来检查节点的类型nodeType
:
yourElement.nodeType
这将为您提供一个整数:(从此处获取)
| Value | Constant | Description | |
|-------|----------------------------------|---------------------------------------------------------------|--|
| 1 | Node.ELEMENT_NODE | An Element node such as <p> or <div>. | |
| 2 | Node.ATTRIBUTE_NODE | An Attribute of an Element. The element attributes | |
| | | are no longer implementing the Node interface in | |
| | | DOM4 specification. | |
| 3 | Node.TEXT_NODE | The actual Text of Element or Attr. | |
| 4 | Node.CDATA_SECTION_NODE | A CDATASection. | |
| 5 | Node.ENTITY_REFERENCE_NODE | An XML Entity Reference node. Removed in DOM4 specification. | |
| 6 | Node.ENTITY_NODE | An XML <!ENTITY ...> node. Removed in DOM4 specification. | |
| 7 | Node.PROCESSING_INSTRUCTION_NODE | A ProcessingInstruction of an XML document | |
| | | such as <?xml-stylesheet ... ?> declaration. | |
| 8 | Node.COMMENT_NODE | A Comment node. | |
| 9 | Node.DOCUMENT_NODE | A Document node. | |
| 10 | Node.DOCUMENT_TYPE_NODE | A DocumentType node e.g. <!DOCTYPE html> for HTML5 documents. | |
| 11 | Node.DOCUMENT_FRAGMENT_NODE | A DocumentFragment node. | |
| 12 | Node.NOTATION_NODE | An XML <!NOTATION ...> node. Removed in DOM4 specification. | |
请注意,根据Mozilla:
以下常量已被弃用,不再应使用:Node.ATTRIBUTE_NODE,Node.ENTITY_REFERENCE_NODE,Node.ENTITY_NODE,Node.NOTATION_NODE
我将使用ParentNode.children:
由于它提供的namedItem
方法可以让我直接获取子元素之一,而无需遍历所有子元素或避免使用getElementById
等。
例如
ParentNode.children.namedItem('ChildElement-ID'); // JS
ref.current.children.namedItem('ChildElement-ID'); // React
this.$refs.ref.children.namedItem('ChildElement-ID'); // Vue
我将使用Node.childNodes:
因为它提供了forEach
我使用window.IntersectionObserver
例如时的方法
nodeList.forEach((node) => { observer.observe(node) })
// IE11 does not support forEach on nodeList, but easy to be polyfilled.
在Chrome 83上
Node.childNodes提供
entries
,forEach
,item
,keys
,length
和values
ParentNode.children提供
item
,length
并namedItem