HTML DOM
1.DOM节点
根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:
- 整个文档是一个文档节点
- 每个 HTML 元素是元素节点
- HTML 元素内的文本是文本节点
- 每个 HTML 属性是属性节点
- 注释是注释节点
2.DOM方法
getElementById():返回带有指定 ID 的元素
HTML DOM 对象 - 方法和属性
一些常用的 HTML DOM 方法:
- getElementById(id) - 获取带有指定 id 的节点(元素)
- appendChild(node) - 插入新的子节点(元素)
- removeChild(node) - 删除子节点(元素)
一些常用的 HTML DOM 属性:
- innerHTML - 节点(元素)的文本值
- parentNode - 节点(元素)的父节点
- childNodes - 节点(元素)的子节点
- attributes - 节点(元素)的属性节点
3.DOM 属性
innerHTML:
获取元素内容的最简单方法是使用 innerHTML 属性。
innerHTML 属性对于获取或替换 HTML 元素的内容很有用
<body> <div id="txt"> 自认惊叹的桥段终沦为老生常谈 </div> <script type="text/javascript"> var t=document.getElementById('txt').innerHTML; document.write(t); </script> </body>
nodeName 属性
nodeName 属性规定节点的名称。
- nodeName 是只读的
- 元素节点的 nodeName 与标签名相同
- 属性节点的 nodeName 与属性名相同
- 文本节点的 nodeName 始终是 #text
- 文档节点的 nodeName 始终是 #document
注释:nodeName 始终包含 HTML 元素的大写字母标签名。
<body> <div id="txt"> <p id="r">自认惊叹的桥段终沦为老生常谈</p> </div> <script type="text/javascript"> var t=document.getElementById('txt'); document.write(t.nodeName+"<br/>"); var q=document.getElementById('r'); document.write(r.firstChild.nodeName); </script> </body>
nodeValue 属性
nodeValue 属性规定节点的值。
- 元素节点的 nodeValue 是 undefined 或 null
- 文本节点的 nodeValue 是文本本身
- 属性节点的 nodeValue 是属性值
<body> <div id="txt"> <p id="r">自认惊叹的桥段终沦为老生常谈</p> </div> <script type="text/javascript"> x=document.getElementById('r'); document.write(x.firstChild.nodeValue); document.write(x.nodeValue); </script> </body>
nodeType 属性
nodeType 属性返回节点的类型。nodeType 是只读的。
<body> <div id="txt"> <p id="r">自认惊叹的桥段终沦为老生常谈</p> </div> <script type="text/javascript"> x=document.getElementById('r'); document.write(x.firstChild.nodeType+"<br/>"); document.write(x.nodeType); </script> </body>
4.DOM 访问
访问 HTML 元素(节点)
访问 HTML 元素等同于访问节点
您能够以不同的方式来访问 HTML 元素:
- 通过使用 getElementById() 方法
- 通过使用 getElementsByTagName() 方法
- 通过使用 getElementsByClassName() 方法
getElementById() 方法
getElementById() 方法返回带有指定 ID 的元素:
语法:node.getElementById("id");
x=document.getElementById('r');
getElementsByTagName() 方法
getElementsByTagName() 返回带有指定标签名的所有元素。
语法:node.getElementsByTagName("tagname");
1 y=document.getElementsByTagName("p"); 2 document.write(y[0].innerHTML);
1 <body> 2 <div id="txt"> 3 <p id="r">自认惊叹的桥段终沦为老生常谈</p> 4 5 </div> 6 <script type="text/javascript"> 7 // x=document.getElementById('r'); 8 // document.write(x.firstChild.nodeType+"<br/>"); 9 // document.write(x.nodeType+"<br/>"); 10 y=document.getElementById('txt').getElementsByTagName("p"); 11 document.write(y[0].innerHTML); 12 </script> 13 </body>
getElementsByClassName() 方法
如果您希望查找带有相同类名的所有 HTML 元素,请使用这个方法
1 <body> 2 <div class="txt"> 3 <p class="txt">自认惊叹的桥段终沦为老生常谈</p> 4 5 </div> 6 <script type="text/javascript"> 7 8 y=document.getElementsByClassName('txt'); 9 document.write(y[1].innerHTML); 10 </script> 11 </body>
IE 5-8无效
5.DOM 修改
修改 HTML 元素
修改 HTML DOM 意味着许多不同的方面:
- 改变 HTML 内容
- 改变 CSS 样式
- 改变 HTML 属性
- 创建新的 HTML 元素
- 删除已有的 HTML 元素
- 改变事件(处理程序)
创建HTML内容
1 <body> 2 <div id="txt"> 3 <p id="r">自认惊叹的桥段终沦为老生常谈</p> 4 5 </div> 6 <script type="text/javascript"> 7 document.getElementById('r').innerHTML="给予你全部如病入膏肓一般"; 8 </script> 9 </body>
改变HTML样式
<body> <div id="txt"> <p id="r">自认惊叹的桥段终沦为老生常谈</p> </div> <script type="text/javascript"> document.getElementById('r').innerHTML="给予你全部如病入膏肓一般"; document.getElementById('r').style.color="red"; </script> </body>
创建新的HTML元素
<body> <div id="txt"> <p id="r">自认惊叹的桥段终沦为老生常谈</p> </div> <script type="text/javascript"> var para=document.createElement('p'); var t=document.createTextNode("lord I'm five hundred miles away from home"); para.appendChild(t); document.getElementById('txt').appendChild(para); </script> </body>
6.DOM 内容
使用事件
HTML DOM 允许您在事件发生时执行代码。
当 HTML 元素”有事情发生“时,浏览器就会生成事件:
- 在元素上点击
- 加载页面
- 改变输入字段
<div id="txt"> <p id="r">自认惊叹的桥段终沦为老生常谈</p> <button onclick="document.body.style.backgroundColor='red'">change background color</button> </div>
1 <body> 2 <div id="txt"> 3 <p id="r">自认惊叹的桥段终沦为老生常谈</p> 4 <button onclick="myfunction()">change</button> 5 </div> 6 <script type="text/javascript"> 7 function myfunction(){ 8 document.getElementById('r').innerHTML="lord I'm five hundred miles away from home"; 9 } 10 11 </script> 12 </body>
7.DOM 元素
创建新的 HTML 元素 - appendChild()
如需向 HTML DOM 添加新元素,您首先必须创建该元素,然后把它追加到已有的元素上。
创建新的 HTML 元素 - insertBefore()
上一个例子中的 appendChild() 方法,将新元素作为父元素的最后一个子元素进行添加。
如果不希望如此,您可以使用 insertBefore() 方法:
1 <body> 2 <div id="txt"> 3 <p id="r">自认惊叹的桥段终沦为老生常谈</p> 4 </div> 5 <script type="text/javascript"> 6 var para=document.createElement('p'); 7 var t=document.createTextNode("lord I'm five hundred miles away from home"); 8 para.appendChild(t); 9 var child=document.getElementById('r'); 10 document.getElementById('txt').insertBefore(para,child); 11 </script> 12 </body>
删除已有的 HTML 元素
如需删除 HTML 元素,您必须清楚该元素的父元素:
1 <body> 2 <div id="txt"> 3 <p id="r">自认惊叹的桥段终沦为老生常谈</p> 4 </div> 5 <script type="text/javascript"> 6 var parent=document.getElementById('txt'); 7 var child=document.getElementById('r'); 8 parent.removeChild(child); 9 </script> 10 </body>
1 <body> 2 <div id="txt"> 3 <p id="r">自认惊叹的桥段终沦为老生常谈</p> 4 </div> 5 <script type="text/javascript"> 6 7 var child=document.getElementById('r'); 8 child.parentNode.removeChild(child); 9 </script> 10 </body>
替换 HTML 元素
如需替换 HTML DOM 中的元素,请使用 replaceChild() 方法:
1 <body> 2 <div id="txt"> 3 <p id="r">自认惊叹的桥段终沦为老生常谈</p> 4 </div> 5 <script type="text/javascript"> 6 var para=document.createElement("p"); 7 var node=document.createTextNode("当战"); 8 para.appendChild(node); 9 var parent=document.getElementById('txt'); 10 var child=document.getElementById('r'); 11 parent.replaceChild(para,child); 12 13 </script> 14 </body>
8.DOM事件
HTML 事件的例子:
- 当用户点击鼠标时
- 当网页已加载时
- 当图片已加载时
- 当鼠标移动到元素上时
- 当输入字段被改变时
- 当 HTML 表单被提交时
- 当用户触发按键时
<div id="txt"> <p id="r" onclick="this.innerHTML='当战'">自认惊叹的桥段终沦为老生常谈</p> </div>
<body> <div id="txt"> <p id="r" onclick="change(this)">自认惊叹的桥段终沦为老生常谈</p> </div> <script type="text/javascript"> function change(id){ id.innerHTML="当战"; } </script> </body>
HTML 事件属性
如需向 HTML 元素分配事件,您可以使用事件属性。
使用 HTML DOM 来分配事件
HTML DOM 允许您使用 JavaScript 向 HTML 元素分配事件
<script> document.getElementById("myBtn").onclick=function(){displayDate()}; </script>
onload 和 onunload 事件
当用户进入或离开页面时,会触发 onload 和 onunload 事件。
onload 事件可用于检查访客的浏览器类型和版本,以便基于这些信息来加载不同版本的网页。
onload 和 onunload 事件可用于处理 cookies。
onchange 事件
onchange 事件常用于输入字段的验证。
下面的例子展示了如何使用 onchange。当用户改变输入字段的内容时,将调用 upperCase() 函数。
onmouseover 和 onmouseout 事件
onmouseover 和 onmouseout 事件可用于在鼠标指针移动到或离开元素时触发函数。
onmousedown、onmouseup 以及 onclick 事件
onmousedown、onmouseup 以及 onclick 事件是鼠标点击的全部过程。首先当某个鼠标按钮被点击时,触发 onmousedown 事件,然后,当鼠标按钮被松开时,会触发 onmouseup 事件,最后,当鼠标点击完成时,触发 onclick 事件。
9.DOM导航
HTML DOM 节点列表
getElementsByTagName() 方法返回节点列表。节点列表是一个节点数组
HTML DOM 节点列表长度
length 属性定义节点列表中节点的数量。
您可以使用 length 属性来循环节点列表
<body> <div id="txt"> <p id="r" onclick="change(this)">自认惊叹的桥段终沦为老生常谈</p> </div> <script type="text/javascript"> var x=document.getElementsByTagName('p'); document.write(x.length); </script> </body>
导航节点关系
您能够使用三个节点属性:parentNode、firstChild 以及 lastChild ,在文档结构中进行导航。
DOM 根节点
这里有两个特殊的属性,可以访问全部文档:
- document.documentElement - 全部文档
- document.body - 文档的主体
alert(document.documentElement.innerHTML)
alert(document.body.innerHTML);
childNodes 和 nodeValue
除了 innerHTML 属性,您也可以使用 childNodes 和 nodeValue 属性来获取元素的内容。
<body> <div id="txt"> <p id="r" onclick="change(this)">自认惊叹的桥段终沦为老生常谈</p> <p>给予你全部如病入膏肓一般</p> </div> <script type="text/javascript"> var x=document.getElementById('r').childNodes[0]; document.write(x.nodeValue); </script> </body>