最新的Web开发教程
 

JavaScript HTML DOM导航


随着HTML DOM,您可以使用节点的关系导航节点树。


DOM节点

根据W3C HTML DOM标准,一切HTML文档中的一个节点:

  • 整个文档是文档节点
  • 每一个HTML元素是元素节点
  • HTML元素中的文本是文本节点
  • 每个HTML属性是一个属性节点
  • 所有评论都是注释节点
HTML DOM树

与HTML DOM,在节点树中的所有节点都可以通过JavaScript访问。

新节点可以被创建,并且所有节点都可以被修改或删除。


节点的关系

在节点树中的节点必须彼此的层级关系。

术语父母,子女,兄弟姐妹和用于描述该关系。

  • 在节点树中,顶节点被称为根(或根节点)
  • 每个节点都只有一个父亲,除了根(它没有父)
  • 一个节点可以有一些儿童
  • 兄弟姐妹(兄弟或姐妹)拥有相同的父节点
<html>

  <head>
      <title>DOM Tutorial</title>
  </head>

  <body>
      <h1>DOM Lesson one</h1>
      <p>Hello world!</p>
  </body>

</html>
节点树

从上面的HTML你可以阅读:

  • <html>是根节点
  • <html>没有父母
  • <html>是父<head><body>
  • <head>是第一个孩子<html>
  • <body>是最后一个子<html>

和:

  • <head>有一个子: <title>
  • <title>有一个子元素(文本节点):“DOM教程”
  • <body>有两个孩子<h1><p>
  • <h1>有一个孩子:“DOM第一课”
  • <p>有一个孩子:“世界,你好!”
  • <h1><p>是兄弟

导航节点间

您可以使用以下节点属性用JavaScript节点之间导航:

  • parentNode
  • childNodes[ nodenumber ]
  • firstChild
  • lastChild
  • nextSibling
  • previousSibling

警告 !

在DOM处理一个常见的错误是期望包含文字元素节点。

在这个例子中:<title> DOM教程</title>元素节点<title>不包含文本。它包含值“DOM教程”一文节点 。

文本节点的值可以由该节点的被访问innerHTML属性或nodeValue


Child节点和节点值

除了innerHTML属性,您还可以使用childNodesnodeValue属性来获得元素的内容。

下面的示例收集了的节点值<h1>元素,并将其复制到<p>元素:

<html>
<body>

<h1 id="intro">My First Page</h1>

<p id="demo">Hello!</p>

<script>
var myText = document.getElementById("intro").childNodes[0].nodeValue;
document.getElementById("demo").innerHTML = myText;
</script>

</body>
</html>
试一试»

在上面的例子中, getElementById是一种方法,而childNodesnodeValue是属性。

在本教程中,我们使用innerHTML属性。 然而,学习上述方法对于理解树结构和DOM的导航有用的。

使用firstChild属性是相同的使用childNodes[0]

<html>
<body>

<h1 id="intro">My First Page</h1>

<p id="demo">Hello World!</p>

<script>
myText = document.getElementById("intro").firstChild.nodeValue;
document.getElementById("demo").innerHTML = myText;
</script>

</body>
</html>
试一试»

DOM根节点

有两个特殊的属性,允许访问完整的文档:

  • document.body -文档的主体
  • document.documentElement -该文件全文

<html>
<body>

<p>Hello World!</p>
<div>
<p>The DOM is very useful!</p>
<p>This example demonstrates the <b>document.body</b> property.</p>
</div>

<script>
alert(document.body.innerHTML);
</script>

</body>
</html>
试一试»

<html>
<body>

<p>Hello World!</p>
<div>
<p>The DOM is very useful!</p>
<p>This example demonstrates the <b>document.documentElement</b> property.</p>
</div>

<script>
alert(document.documentElement.innerHTML);
</script>

</body>
</html>
试一试»

nodeName属性

nodeName属性指定节点的名称。

  • nodeName为只读
  • nodeName元素节点的相同标签名
  • nodeName属性节点是属性名称
  • nodeName文本节点的永远是#text
  • nodeName的文档节点的是总是#document

注意: nodeName总是包含HTML元素的大写标签名。


nodeValue属性

nodeValue属性指定节点的值。

  • nodeValue元素节点是未定义
  • nodeValue对于文本节点是文本本身
  • nodeValue为属性节点是属性值

nodeType物业

nodeType属性返回节点的类型。 nodeType是只读的。

最重要的节点类型是:

元素类型 的NodeType
Element 1
Attribute 2
Text 3
Comment 8
Document 9