Node - DOM API 对象类型继承的接口
Node
是许多 DOM API 对象类型继承的接口;它允许对这些不同类型进行类似处理,例如继承相同的一组方法,或者以相同的方式进行测试。
以下接口都继承了 Node
的方法和属性:Document
Element
CharacterData
(被 Text
,Comment
和 CDATASection
继承)ProcessingInstruction
DocumentFragment
DocumentType
Notation
Entity
EntityReference
当某些方法和属性与这些接口不相关时,可能返回 null
。它们也可能会引发异常 - 例如,在将子节点添加到不能存在任何子节点类型时。
属性
从其父接口 EventTarget
继承了属性。
Node.baseURI
只读
返回表示基本 URL 的 DOMString
。基本 URL 的概念在每一种语言中不同;在 HTML 中,它与协议,域名和目录结构相对应,直到最后一个 '/'
为止。
Node.baseURIObject
Firefox 3
(不适用于 Web 内容。)只读 nsIURI
对象,表示元素的基本 URI。
Node.childNodes
只读
返回一个实时的 NodeList
},包含该节点所有子节点。NodeList
处于活动状态意味着,如果 Node
的子节点发生更改,则 NodeList
对象会自动更新。
Node.firstChild
只读
返回一个 Node
},表示节点的第一个直接子节点,如果该节点没有子节点,则返回 null
。
Node.isConnected
只读
返回一个布尔值,该值指示节点是否(直接或间接)连接到上下文对象,例如,在普通 DOM 下,是 Document
对象,在 shadow DOM 下是 ShadowRoot
。
Node.lastChild
只读
返回一个 Node
,表示节点的最后一个直接子节点;如果该节点没有子节点,则返回 null
。
Node.nextSibling
只读
返回 Node
,表示树中下一个节点,如果没有这样的节点,则返回 null
。
Node.nodeName
只读
返回一个 DOMString
},包含节点名称。名称的结构将因节点类型而异。例如,HTMLElement
将包含相应标签的名称,象 HTMLAudioElement
是 'audio'
,Text
是 '#text'
字符串,Document
节点是 '#document'
字符串。
Node.nodeType
只读
返回一个 unsigned short
,表示节点类型。可能的值为:
名称 | 值 |
---|---|
ELEMENT_NODE |
1 |
ATTRIBUTE_NODE |
2 |
TEXT_NODE |
3 |
CDATA_SECTION_NODE |
4 |
ENTITY_REFERENCE_NODE |
5 |
ENTITY_NODE |
6 |
PROCESSING_INSTRUCTION_NODE |
7 |
COMMENT_NODE |
8 |
DOCUMENT_NODE |
9 |
DOCUMENT_TYPE_NODE |
10 |
DOCUMENT_FRAGMENT_NODE |
11 |
NOTATION_NODE |
12 |
Node.nodeValue
返回 / 设置当前节点的值
Node.ownerDocument
只读
返回此节点所属的 Document
}。如果节点本身是一个文档,则返回 null
。
Node.parentNode
只读
返回一个 Node
,它是此节点的父级。如果没有这样的节点(例如,如果该节点位于树的顶部或不在树中),则此属性返回 null
。
Node.parentElement
只读
返回一个 Element
,它是此节点的父级。如果节点没有父节点,或者该父节点不是 Element
,则此属性返回 null
。
Node.previousSibling
只读
返回表示树中上一个节点的 Node
},如果没有,则返回 null
。
Node.textContent
返回 / 设置元素及其所有后代的文本内容。
过时的属性
Node.localName
只读
返回一个 DOMString
},表示元素名称的本地部分。
注意: 在 Firefox 3.5 和更低版本中,该属性将 HTML 元素(而不是 XHTML 元素)的本地名称大写。在更高版本中,不会发生这种情况,因此对于 HTML 和 XHTML,该属性均小写。
Node.namespaceURI
只读
此节点的名称空间 URI,如果没有名称空间,则为 null
。
注意: 在 Firefox 3.5 及更低版本中,HTML 元素没有命名空间。在更高版本中,HTML 元素位于 HTML 和 XML 树的
http://www.w3.org/1999/xhtml/
命名空间中。
真实用法
以下内容演示了 eachNode
函数的实际用法:在网页上搜索文本。我们使用名为 grep
的包装器函数进行搜索:
function grep(parentNode, pattern){
var matches = [];
var endScan = false;
eachNode(parentNode, function(node){
if(endScan)
return false;
// 忽略不是文本节点的任何内容
if(node.nodeType !== Node.TEXT_NODE)
return;
if("string" === typeof pattern){
if(-1 !== node.textContent.indexOf(pattern))
matches.push(node);
}
else if(pattern.test(node.textContent)){
if(!pattern.global){
endScan = true;
matches = node;
}
else matches.push(node);
}
});
return matches;
}
例如,要查找包含错字的 Text
节点,请执行以下操作:
var typos = ["teh", "adn", "btu", "adress", "youre", "msitakes"];
var pattern = new RegExp("\\b(" + typos.join("|") + ")\\b", "gi");
var mistakes = grep(document.body, pattern);
console.log(mistakes);
规范
规范 | 状态 | 备注 |
---|---|---|
DOM Node 的定义 |
现行的标准 | 添加了以下方法:getRootNode() |
DOM4 Node 的定义 |
已过时 | 移除了以下属性:attributes ,namespaceURI ,prefix 和 localName 。移除了以下方法: isSupported() ,hasAttributes() ,getFeature() ,setUserData() 和 getUserData() 。 |
Document Object Model (DOM) Level 3 Core Specification Node 的定义 |
已过时 | 如果在 Document 上调用 insertBefore() ,replaceChild() ,removeChild() 和 appendChild() 方法,会返回另一种错误(NOT_SUPPORTED_ERR )。修改了 normalize() 方法,使得如果设置了正确的 DOMConfiguration 标志,也可以将 Text 节点标准化。增加了以下方法: compareDocumentPosition() ,isSameNode() ,lookupPrefix() ,isDefaultNamespace() ,lookupNamespaceURI() ,isEqualNode() ,getFeature() ,setUserData() 和 getUserData() 。增加了以下属性: baseURI 和 textContent 。 |
Document Object Model (DOM) Level 2 Core Specification Node 的定义 |
已过时 | 对 ownerDocument 属性进行了一些修改,以便 DocumentFragment 也返回 null 。添加了以下属性:namespaceURI ,prefix 和 localName 。添加了以下方法: normalize() , isSupported() 和 hasAttributes() 。 |
Document Object Model (DOM) Level 1 Specification Node 的定义 |
已过时 | 初始定义。 |
桌面浏览器兼容性
特性 | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
feature_basicsupport | 支持1 | 支持 | 1 | 5 | 支持1 | 支持1 |
appendChild | 支持 | 12 | 支持 | 5 | 支持 | 支持 |
baseURI | 支持 | 12 | 1 | 未知 | 支持 | 支持 |
baseURIObject | 未知 | 未知 | 未知 | 未知 | 未知 | 未知 |
childNodes | 支持 | 12 | 1 | 支持 | 支持 | 支持 |
cloneNode | 支持 | 12 | 支持 | 支持 | 支持 | 支持 |
compareDocumentPosition | 支持 | 12 | 9 | 92 | 支持 | 支持 |
contains | 支持 | 12 | 支持 | 93 | 支持 | 支持 |
firstChild | 支持 | 12 | 1 | 支持 | 支持 | 支持 |
getFeature | 不支持 | 未知 | 不支持 | 未知 | 未知 | 未知 |
getRootNode | 54 | 不支持 | 53 | 不支持 | 41 | 10.1 |
getUserData | 不支持 | 未知 | 1 — 22 | 未知 | 不支持 | 不支持 |
hasAttributes | 不支持 | 12 | 不支持 | 未知 | 未知 | 未知 |
hasChildNodes | 1 | 12 | 支持 | 9 | 支持 | 支持 |
insertBefore | 1 | 12 | 3 | 9 | 支持 | 支持 |
isConnected | 51 | 不支持 | 53 | 不支持 | 38 | 10.1 |
isDefaultNamespace | 支持 | 12 | 支持 | 未知 | 支持 | 支持 |
isEqualNode | 1 | 12 | 2 | 9 | 支持 | 支持 |
isSameNode | 支持 | 12 | 48 1 — 10 | 未知 | 支持 | 支持 |
isSupported | 不支持 | 未知 | 1 — 22 | 未知 | 未知 | 未知 |
lastChild | 支持 | 12 | 1 | 支持 | 支持 | 支持 |
localName | 支持 — 464 | 12 | 1 — 484 | 未知 | 未知 | 未知 |
lookupNamespaceURI | 支持 | 12 | 支持 | 未知 | 支持 | 支持 |
lookupPrefix | 支持 | 12 | 支持 | 未知 | 支持 | 支持 |
namespaceURI | 支持 — 464 | 12 | 1 — 484 | 未知 | 未知 | 未知 |
nextSibling | 支持 | 12 | 支持 | 未知 | 支持 | 支持 |
nodeName | 支持 | 12 | 支持 | 未知 | 支持 | 支持 |
nodePrincipal | 支持 — 464 | 未知 | 未知 | 未知 | 未知 | 未知 |
nodeType | 支持 | 12 | 支持 | 未知 | 支持 | 支持 |
nodeValue | 支持 | 12 | 支持 | 未知 | 支持 | 支持 |
normalize | 支持 | 12 | 支持 | 未知 | 支持 | 支持 |
outerText | 不支持 | 未知 | 未知 | 未知 | 不支持 | 未知 |
ownerDocument | 支持 | 12 | 支持 95 | 9 | 支持 | 支持 |
parentElement | 支持 | 12 | 9 | 支持6 | 支持 | 支持 |
parentNode | 支持 | 12 | 1 | 支持 | 支持 | 支持 |
prefix | 不支持 | 12 | 1 — 484 57 | 支持6 | 不支持 | 支持 |
previousSibling | 支持 | 12 | 支持 | 未知 | 支持 | 支持 |
removeChild | 支持 | 12 | 支持 | 5 | 支持 | 支持 |
replaceChild | 1 | 12 | 1 | 9 | 2 | 支持 |
rootNode | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 未知 |
setUserData | 不支持 | 未知 | 1 — 22 | 未知 | 不支持 | 不支持 |
textContent | 支持 | 12 | 1 | 支持 | 支持 | 3 |
移动浏览器兼容性
特性 | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
feature_basicsupport | 支持1 | 支持1 | 未知 | 4 | 未知 | 支持1 | 支持1 |
appendChild | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
baseURI | 支持 | 支持 | 未知 | 4 | 未知 | 支持 | 支持 |
baseURIObject | 未知 | 未知 | 未知 | 未知 | 未知 | 未知 | 未知 |
childNodes | 支持 | 支持 | 未知 | 4 | 未知 | 支持 | 支持 |
cloneNode | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
compareDocumentPosition | 支持 | 支持 | 未知 | 9 | 未知 | 支持 | 支持 |
contains | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
firstChild | 支持 | 支持 | 未知 | 4 | 未知 | 支持 | 支持 |
getFeature | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 未知 | 未知 |
getRootNode | 54 | 54 | 未知 | 53 | 未知 | 41 | 10.3 |
getUserData | 不支持 | 不支持 | 未知 | 4 — 22 | 未知 | 不支持 | 不支持 |
hasAttributes | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 未知 | 未知 |
hasChildNodes | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
insertBefore | 1 | 18 | 未知 | 支持 | 未知 | 支持 | 支持 |
isConnected | 51 | 51 | 未知 | 45 | 未知 | 41 | 10.3 |
isDefaultNamespace | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
isEqualNode | 支持 | 支持 | 未知 | 4 | 未知 | 支持 | 支持 |
isSameNode | 支持 | 支持 | 未知 | 48 4 — 10 | 未知 | 支持 | 支持 |
isSupported | 不支持 | 不支持 | 未知 | 4 — 22 | 未知 | 未知 | 未知 |
lastChild | 支持 | 支持 | 未知 | 45 | 未知 | 支持 | 支持 |
localName | 支持 — 464 | 支持 — 464 | 未知 | 45 | 未知 | 支持 | 支持 |
lookupNamespaceURI | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
lookupPrefix | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
namespaceURI | 支持 — 464 | 支持 — 464 | 未知 | 45 | 未知 | 支持 | 支持 |
nextSibling | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
nodeName | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
nodePrincipal | 支持 — 464 | 支持 — 464 | 未知 | 未知 | 未知 | 未知 | 未知 |
nodeType | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
nodeValue | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
normalize | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
outerText | 不支持 | 不支持 | 未知 | 未知 | 未知 | 不支持 | 未知 |
ownerDocument | 支持 | 支持 | 未知 | 支持 95 | 未知 | 支持 | 支持 |
parentElement | 支持 | 支持 | 未知 | 9 | 未知 | 支持 | 支持 |
parentNode | 支持 | 支持 | 未知 | 4 | 未知 | 支持 | 支持 |
prefix | 不支持 | 不支持 | 未知 | 9 | 未知 | 不支持 | 未知 |
previousSibling | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
removeChild | 支持 | 支持 | 未知 | 支持 | 未知 | 支持 | 支持 |
replaceChild | 1 | 18 | 未知 | 4 | 未知 | 支持 | 支持 |
rootNode | 不支持 | 不支持 | 未知 | 不支持 | 未知 | 不支持 | 未知 |
setUserData | 不支持 | 不支持 | 未知 | 4 — 22 | 未知 | 不支持 | 不支持 |
textContent | 支持 | 支持 | 未知 | 4 | 未知 | 支持 | 支持 |
1. WebKit 和旧版本的 Blink 错误地使 Node
没有从 EventTarget
继承。
2. 只有元素支持 contains
。
3. 只有 HTML 元素支持 contains
,SVG 元素不支持。
4. 根据 DOM4 标准,此 API 已移至 Element
和 Attr
API。
5. doctype 节点(即 Node.nodeType
为 Node。DOCUMENT_TYPE_NODE
或 10 的节点)的 ownerDocument
不再为 null。相反,ownerDocument
是在其上调用 document.implementation.createDocumentType()
的文档。
6. 仅在 Element
上受支持。
7. 此属性原来是可读写的;从 Firefox 5.0 开始,它遵循规范变成只读的。