Node - DOM API 对象类型继承的接口

Node 是许多 DOM API 对象类型继承的接口;它允许对这些不同类型进行类似处理,例如继承相同的一组方法,或者以相同的方式进行测试。

以下接口都继承了 Node 的方法和属性:Document Element CharacterData(被 TextCommentCDATASection 继承)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 的定义
已过时 移除了以下属性:attributesnamespaceURIprefixlocalName
移除了以下方法: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()
增加了以下属性:baseURItextContent
Document Object Model (DOM) Level 2 Core Specification
Node 的定义
已过时 ownerDocument 属性进行了一些修改,以便 DocumentFragment 也返回 null。添加了以下属性:namespaceURIprefixlocalName
添加了以下方法:normalize(), isSupported()hasAttributes()
Document Object Model (DOM) Level 1 Specification
Node 的定义
已过时 初始定义。

桌面浏览器兼容性

特性ChromeEdgeFirefoxInternet ExplorerOperaSafari
feature_basicsupport 支持1 支持15 支持1 支持1
appendChild 支持12 支持5 支持 支持
baseURI 支持121 未知 支持 支持
baseURIObject 未知 未知 未知 未知 未知 未知
childNodes 支持121 支持 支持 支持
cloneNode 支持12 支持 支持 支持 支持
compareDocumentPosition 支持12992 支持 支持
contains 支持12 支持93 支持 支持
firstChild 支持121 支持 支持 支持
getFeature 不支持 未知 不支持 未知 未知 未知
getRootNode54 不支持53 不支持4110.1
getUserData 不支持 未知1 — 22 未知 不支持 不支持
hasAttributes 不支持12 不支持 未知 未知 未知
hasChildNodes112 支持9 支持 支持
insertBefore11239 支持 支持
isConnected51 不支持53 不支持3810.1
isDefaultNamespace 支持12 支持 未知 支持 支持
isEqualNode11229 支持 支持
isSameNode 支持12

48

1 — 10

未知 支持 支持
isSupported 不支持 未知1 — 22 未知 未知 未知
lastChild 支持121 支持 支持 支持
localName 支持 — 464121 — 484 未知 未知 未知
lookupNamespaceURI 支持12 支持 未知 支持 支持
lookupPrefix 支持12 支持 未知 支持 支持
namespaceURI 支持 — 464121 — 484 未知 未知 未知
nextSibling 支持12 支持 未知 支持 支持
nodeName 支持12 支持 未知 支持 支持
nodePrincipal 支持 — 464 未知 未知 未知 未知 未知
nodeType 支持12 支持 未知 支持 支持
nodeValue 支持12 支持 未知 支持 支持
normalize 支持12 支持 未知 支持 支持
outerText 不支持 未知 未知 未知 不支持 未知
ownerDocument 支持12

支持

95

9 支持 支持
parentElement 支持129 支持6 支持 支持
parentNode 支持121 支持 支持 支持
prefix 不支持12

1 — 484

57

支持6 不支持 支持
previousSibling 支持12 支持 未知 支持 支持
removeChild 支持12 支持5 支持 支持
replaceChild112192 支持
rootNode 不支持 未知 不支持 未知 不支持 未知
setUserData 不支持 未知1 — 22 未知 不支持 不支持
textContent 支持121 支持 支持3

移动浏览器兼容性

特性AndroidChrome for AndroidEdge mobileFirefox for AndroidIE mobileOpera AndroidiOS Safari
feature_basicsupport 支持1 支持1 未知4 未知 支持1 支持1
appendChild 支持 支持 未知 支持 未知 支持 支持
baseURI 支持 支持 未知4 未知 支持 支持
baseURIObject 未知 未知 未知 未知 未知 未知 未知
childNodes 支持 支持 未知4 未知 支持 支持
cloneNode 支持 支持 未知 支持 未知 支持 支持
compareDocumentPosition 支持 支持 未知9 未知 支持 支持
contains 支持 支持 未知 支持 未知 支持 支持
firstChild 支持 支持 未知4 未知 支持 支持
getFeature 不支持 不支持 未知 不支持 未知 未知 未知
getRootNode5454 未知53 未知4110.3
getUserData 不支持 不支持 未知4 — 22 未知 不支持 不支持
hasAttributes 不支持 不支持 未知 不支持 未知 未知 未知
hasChildNodes 支持 支持 未知 支持 未知 支持 支持
insertBefore118 未知 支持 未知 支持 支持
isConnected5151 未知45 未知4110.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 支持 支持 未知 支持 未知 支持 支持
replaceChild118 未知4 未知 支持 支持
rootNode 不支持 不支持 未知 不支持 未知 不支持 未知
setUserData 不支持 不支持 未知4 — 22 未知 不支持 不支持
textContent 支持 支持 未知4 未知 支持 支持

1. WebKit 和旧版本的 Blink 错误地使 Node 没有从 EventTarget 继承。

2. 只有元素支持 contains

3. 只有 HTML 元素支持 contains,SVG 元素不支持。

4. 根据 DOM4 标准,此 API 已移至 ElementAttr API。

5. doctype 节点(即 Node.nodeType 为 Node。DOCUMENT_TYPE_NODE 或 10 的节点)的 ownerDocument 不再为 null。相反,ownerDocument 是在其上调用 document.implementation.createDocumentType() 的文档。

6. 仅在 Element 上受支持。

7. 此属性原来是可读写的;从 Firefox 5.0 开始,它遵循规范变成只读的。