二十五岁时我们都一样愚蠢、多愁善感,喜欢故弄玄虚,可如果不那样的话,五十岁时也就不会如此明智。
标题:JavaScript htmldom 导航
使用HTML DOM, 可以使用节点关系来导航节点树.
DOM 节点
根据W3C HTML DOM标准, 在一个HTML文档都是一个节点:
The entire document is a document node 每个HTML元素是元素节点 在HTML元素的文本是文本节点 每一个HTML属性是一个属性节点 所有注释都是注释节点
使用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 Tutorial"<body>
有两个子节点:<h1>
和<p>
<h1>
有一个子节点: "DOM Lesson one"<p>
有一个子节点: "Hello world!"<h1>
和<p>
是兄弟节点
节点之间导航
你可以使用以下的节点属性导航节点之间使用JavaScript:
- parentNode
- childNodes[nodenumber]
- firstChild
- lastChild
- nextSibling
- previousSibling
子节点和节点值
在DOM处理中常见的错误就是认为一个元素节点包含文本.
<title id="demo">DOM Tutorial</title>元素节点
<title>
(在上面的实例中) 不包含文本。它包含有值的文本节点 "DOM Tutorial".
该文本节点的值可以通过节点的innerHTML属性访问:
var myTitle = document.getElementById("demo").innerHTML;访问innerHTML属性访问和访问第一个子节点值相同:
var myTitle = document.getElementById("demo").firstChild.nodeValue;访问第一个子节点也可以这样做:
var myTitle = document.getElementById("demo").childNodes[0].nodeValue;所有下面3个实例查询
<h1>
元素的文本,并且拷贝它到<p>
元素。<html> <body> <h1 id="id01">My First Page</h1> <p id="id02"></p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").innerHTML; </script> </body> </html><html> <body> <h1 id="id01">My First Page</h1> <p id="id02"></p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").firstChild.nodeValue; </script> </body> </html><html> <body> <h1 id="id01">My First Page</h1> <p id="id02">Hello!</p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").childNodes[0].nodeValue; </script> </body> </html>
InnerHTML
在本教程中,我们使用innerHTML属性来检索HTML元素的内容.
然而,学习其他方法理解树结构和DOM的导航是有用的.
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总是 #text
- 文档的节点名称总是 #document
<h1 id="id01">My First Page</h1> <p id="id02"></p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").nodeName; </script>注意: nodeName总是包含HTML元素的大写标签名称.
nodeValue 属性
nodeValue 属性指定节点的值.
- 素节点的节点值是 undefined
- 文本节点的节点是文本本身
- 属性节点的节点值是属性值
nodeType 属性
nodeType 属性返回节点类型. nodeType 是只读的.
<h1 id="id01">My First Page</h1> <p id="id02"></p> <script> document.getElementById("id02").innerHTML = document.getElementById("id01").nodeType; </script>最重要的节点类型有:
元素类型 节点类型 Element 1 Attribute 2 Text 3 Comment 8 Document 9