HTML DOM
导读
HTML DOM是专门适用于HTML/XHTML的文档对象模型,它将网页中的各个元素都看作一个个对象,从而使网页中的元素也可以被计算机语言获取或者编辑。
HTML DOM的概念
DOM是Document Object Model文档对象模型的缩写。
DOM 是 W3C(万维网联盟)的标准,定义了访问 HTML 和 XML 文档的标准。其标准被划分为 3 个不同的部分:1、核心 DOM - 针对任何结构化文档的标准模型。2、XML DOM - 针对 XML 文档的标准模型。3、HTML DOM - 针对 HTML 文档的标准模型。
HTML DOM 定义了访问和操作 HTML 文档的标准方法。换言之,HTML DOM是HTML 的标准对象模型,是HTML 的标准编程接口,是W3C 标准, 是关于如何获取、修改、添加或删除 HTML 元素的标准。
HTML DOM 节点树
HTML DOM 将 HTML 文档视作树结构。这种结构被称为节点树:
节点树中的节点彼此拥有层级关系,上级为父,下级为子,同级的称为同胞。在节点树中,顶端节点被称为根(root)。
注:DOM 处理中的常见错误是希望元素节点包含文本。
HTML DOM 对象 - 方法和属性
HTML DOM - 事件
HTML DOM 允许 JavaScript 对 HTML 事件作出反应,当事件发生时,可以执行 JavaScript,比如当用户点击一个 HTML 元素时。如需在用户点击某个元素时执行代码,请把 JavaScript 代码添加到 HTML 事件属性中:
onclick=JavaScript 实例:<input type="button" onclick="document.body.style.backgroundColor='blue';" value="修改背景颜色">
改变 HTML 样式
通过 HTML DOM,您能够访问 HTML 元素的样式对象。下面的例子改变一个段落的 HTML 样式:
<p>something</p>
<p id="text">something</p>
<script>
document.getElementById("text").style.color="blue";
document.getElementById("text").style.fontFamily="Arial";
document.getElementById("text").style.fontSize="larger";
</script>
HTML DOM 导航
通过 HTML DOM,您能够使用节点关系在节点树中导航。
- HTML DOM 节点列表 getElementsByTagName() 方法返回节点列表。节点列表是一个节点数组。
- HTML DOM 节点列表长度 ength 属性定义节点列表中节点的数量。您可以使用 length 属性来循环节点列表。
- 导航节点关系 您能够使用三个节点属性:parentNode、firstChild 以及 lastChild ,在文档结构中进行导航。
- DOM 根节点 document.documentElement - 全部文档 document.body - 文档的主体
- childNodes 和 nodeValue 除了 innerHTML 属性,您也可以使用 childNodes 和 nodeValue 属性来获取元素的内容。
代码示例
getElementById()
语法:document.getElementById(elementID)
实例:<script>document.getElementById("demo");//选中ID为demo的元素</script>
getElementsByTagName()
语法:element.getElementsByTagName(tagname)
实例:<script>document.getElementsByTagName("A")[0];选中文档中 <a> 标签集合里索引为 0 的元素</script>
getElementsByClassName()
语法:element.getElementsByClassName(classname)
实例:
<script>
document.getElementsByClassName("demo")[0].getElementsByClassName("example")[0];
//选中在文档中 class="demo" 的索引值为 0 的列表中 class="example" 的索引值为 0 的元素
</script>
createElement() createTextNode() appendChild()
查看完整代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HTML DOM实例</title>
</head>
<body>
<div id="demo">
<p id="text">something.</p>
</div>
<script>
var node=document.createElement("p");
var nodeText=document.createTextNode("other something.");
node.appendChild(nodeText);
document.getElementById("demo").appendChild(node);
</script>
</body>
</html>
<div id="demo">
<p>something.</p>
</div>
<script>
var node=document.createElement("p");
var nodeText=document.createTextNode("other something.");
node.appendChild(nodeText);
document.getElementById("demo").appendChild(node);
</script>
createAttribute()
查看完整代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HTML DOM实例</title>
<style type="text/css">
.democlass{
color:red;
}
</style>
</head>
<body>
<h1>something</h1>
<p>单击按钮来创建一个“类”属性值“democlass”插入到上面的H1元素。</p>
<button onclick="change()">点我</button>
<script>
function change(){
var h1=document.getElementsByTagName("H1")[0];
var att=document.createAttribute("class");
att.value="democlass";
h1.setAttributeNode(att);
}
</script>
</body>
</html>
语法:document.createAttribute(attributename)
实例:
<script>
var h1=document.getElementsByTagName("H1")[0];
var att=document.createAttribute("class");
att.value="democlass";h1.setAttributeNode(att);//创建 class 属性, 属性值为 "democlass", 并将clas属性添加到 H1 元素中
</script>
getAttribute()
查看完整代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HTML DOM实例</title>
</head>
<body>
跳转到 <a href="index.html" target="_blank">Anani</a>.
<p id="demo">单击按钮以显示上述链接的目标属性的值</p>
<button onclick="myFunction()">点我</button>
<script>
function myFunction(){
var a=document.getElementsByTagName("a")[0];
document.getElementById("demo").innerHTML=a.getAttribute("target");
}
</script>
</body>
</html>
语法:element.getAttribute(attributename)
实例:<script>document.getElementsByTagName("A")[0].getAttribute("target");//设置 input元素的的属性类型</script>
setAttribute()
查看完整代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HTML DOM实例</title>
</head>
<body>
<input value="something">
<p id="demo">点击下面的按钮来设置按钮的类型属性。</p>
<button onclick="change()">点我</button>
<script>
function change(){
document.getElementsByTagName("INPUT")[0].setAttribute("type","button");
};
</script>
<p>Internet Explorer 8 及更早的版本不支持 setAttribute 方法。</p>
</body>
</html>
语法:element.setAttribute(attributename,attributevalue)
实例:
<script>
document.getElementsByTagName("A")[0].setAttribute("target","_blank");
//设置文档中索引为 0 的 a 元素的 target 属性的值为 _blank
</script>
insertBefore()
查看完整代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HTML DOM实例</title>
</head>
<body>
<ul id="demo"><li>Coffee</li><li>Tea</li></ul>
<p>单击按钮插入一个项目列表</p>
<button onclick="change()">点我</button>
<script>
function change(){
var newItem=document.createElement("LI")
var textnode=document.createTextNode("Water")
newItem.appendChild(textnode)
var list=document.getElementById("demo")
list.insertBefore(newItem,list.childNodes[0]);
}
</script>
<p>首先创建一个li节点,然后创建一个文本节点,然后添加文本节点的在li节点。最后在第一个子节点列表插入li节点。</p>
</body>
</html>
语法:node.insertBefore(newnode,existingnode)
实例:
<script>
document.getElementById("demo").insertBefore(newItem,existingItem);//列表中添加项
</script>
removeChild()
查看完整代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HTML DOM实例</title>
</head>
<body>
<ul id="demo"><li>Coffee</li><li>Tea</li><li>Milk</li></ul>
<p>单击按钮移除列表的第一项</p>
<button onclick="change()">点我</button>
<script>
function change(){
var list=document.getElementById("demo");
list.removeChild(list.childNodes[0]);
}
</script>
</body>
</html>
语法:node.removeChild(node)
实例:
<script>
var parent=document.getElementById("demo");
parent.removeChild(parent.childNodes[0]);//从 ID 为 demo 的子节点中删除索引为 0 的节点
</script>
replaceChild()
查看完整代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>HTML DOM实例</title>
</head>
<body>
<ul id="demo"><li>Coffee</li><li>Tea</li><li>Milk</li></ul>
<p id="demo">单击按钮替换列表中的第一项。</p>
<button onclick="change()">点我</button>
<script>
function change(){
var textnode=document.createTextNode("Water");
var item=document.getElementById("demo").childNodes[0];
item.replaceChild(textnode,item.childNodes[0]);
}
</script>
<p>首先创建一个文本节点。<br>然后替换第一个列表中的第一个子节点。</p>
<p><strong>注意:</strong>这个例子只将文本节点的文本节点“Coffee”替换为“Water”,而不是整个LI元素,这也是替换节点的一种备选。</p>
</body>
</html>
语法:node.replaceChild(newnode,oldnode)
实例:<script>document.getElementById("myList").replaceChild(newnode,oldnode);//从 ID 为 demo 的子节点中删除索引为 0 的节点</script>