HTML DOM
一,DOM 简介
通过 HTML DOM,可访问 javascript HTML 文档的所有元素
HTML DOM(文档对象模型)
当网页被加载时,浏览器会创造页面的文档对象模型(Document Object Model)。
HTML DOM 模型被构造为对象的树。
![](https://img.haomeiwen.com/i5342868/08666af11bfdab93.gif)
通过可编程的对象模型,javascript 获得了足够的能力来创建动态的HTML。javascript 能够改变页面中的所有 HTML 元素,所有 HTML 属性和所有 CSS样式。能够对页面中的所有事件做出反应。
通过 javascript,操作 HTML 元素。首先要找到该元素
通过 id 查找 HTML 元素
var x = document.getElementById.("mata");
如果找到该元素,则该方法将以对象(在 x 中)的形式返回该元素。如果未找到该元素,则 x 将包含 null。
通过标签名查找 HTML 元素
var x = document.getElementById.("mata");
var y = x.getElementsByTagName("p");
document.write("第四段是:" + y[3]);
![](https://img.haomeiwen.com/i5342868/598e199409d07d45.png)
通过查找 id = "mata" 的元素,然后查找 "mata" 中的所有<p>元素
DOM - 改变 HTML
HTML DOM 允许 javascript 改变 HTML 元素的内容。
改变 HTML 输出流
在 javascript 中,document.write() 可用于直接向 HTML 输出流写内容。
<script>
document.write(Date());
</script>
![](https://img.haomeiwen.com/i5342868/da310bc44d3f01de.png)
不要使用在文档加载之后使用 document.write()。这会覆盖该文档。
改变 HTML 内容
修改 HTML 内容的最简单的方法是使用 innerHTML 属性。语法:
document.getElementById(id).innerHTML = new HTML
例:
<p id = "p">hell world!</p>
<script>
document.getElementById("p").innerHTML = "good bye!";
</script>
或:
<script>
var x = document.getElementById("p");
x.innerHTML = "good bye!";
<script>
![](https://img.haomeiwen.com/i5342868/5941486e12860fdc.png)
改变 HTML 属性
改变 HTML 元素属性,语法:
document.getElementById(id).attribute=new value
例:
<img id = "image" src = "../img/dpn.gif">
<script>
document.getElementById("image").src = "../img/dpff.gif";
</script>
效果:
![](https://img.haomeiwen.com/i5342868/bd4d8312648c3c71.png)
原图为熄灯(dpn.gif),但是已被修改为开灯(dpff.gif)。
改变 CSS
HTML DOM 允许 javascript 改变 HTML 元素的样式
改变 HTML 样式
语法: document.getElementById(id).style.property = new style
例:
<h1 id = "h1">DOM CSS</h1>
<button type="button" onclick = "document.getElementById("h1").style.color='#ff727a'">
请点击</button>
点击后的效果:
![](https://img.haomeiwen.com/i5342868/b87d091b4a7dba32.png)
DOM 事件
HTML DOM 使 javascript 有能力对 HTML 事件做出反应
对事件做出反应
可以在事件发生时执行 javascript,比如当用户在 HTML 元素上点击时。如需在用户点击某个元素时执行代码,请向一个 HTML 事件属性添加 javascript 代码:
onclick = javascript
HTML 事件的例子:
1,当用户点击鼠标时 2,当网页已加载时 3,当图像已加载时 4,当鼠标移动到元素上时 5,当输入字段被改变时 6,当提交 HTML 表单时 7,当用户触发按键时
例: 点击时改变内容
<h1 onclick = "this.innerHTML = '谢谢!'">点击该文本</h1>
或: 从事件处理器调用一个函数:
<h1 onclick = "text(this)">点击该文本</h1>
<script>
function text(h1) {
h1.innerHTML = "谢谢!";
}
</script>
![](https://img.haomeiwen.com/i5342868/4e88bfccd278dbd1.png)
HTML 事件属性
如需向 HTML 元素分配事件,可以使用时间属性。
例:向 button 元素分配 onclick 事件:
<button onclick = "date()">请点击</button>
<script>
fonction date() {
document.getElementById("h1").innerHTML = Date();
}
</script>
使用 HTML DOM 来分配事件
HTML DOM 允许通过使用 javascript 来向
<button id = "my">请点击</button>
<script>
document.getElementById("my").onclick = function(){date()};
function date() {
document.getElementById("h1").innerHTML = Date();
}
</script>
![](https://img.haomeiwen.com/i5342868/2a64c2a2ff4dcde5.png)
onload 和 onunload 事件
onload 和 onunload 事件会在用户进入或离开页面时被触发。 onload 事件可用于检测访问者的浏览器类型和浏览器版本,并基于这些信息来加载页面的正确版本。 onload 和 onunload 事件可用于处理 cookie。
<body onload = "boy()">
<script>
function boy() {
if (navigator.cookieEnabled == true) {
alert("已启用 cookie");
}
else {
alert("未启用 cookie");
}
}
</script>
</body>
![](https://img.haomeiwen.com/i5342868/0b361024d6576356.png)
onchange 事件
onchange 事件常结合对输入字段的验证来使用。
<input type = "text" id = "fname" onchange = "myf()">
<script>
function myf() {
var x=document.getElementById("fname");
x.value = x.value.toUpperCase();
}
</script>
![](https://img.haomeiwen.com/i5342868/96753836fe0387e0.png)
onmouseover 和 onmouseout 事件
onmouseover 和 onmouseout 事件可用于在用户的鼠标移至 HTML 元素上方或移除元素时触发函数。
<div onmouseover = "mOver(this)" onmouseout = "mOut(this) style = ""background-color: green; width: 200px; padding: 40px; color: #FFF">把鼠标移到上面</div>
<script>
function mOver(obj) {
obj.innerHTML = "谢谢!";
}
function mOut(obj) {
obj.innerHTML = "把鼠标移到上面";
}
</script>
![](https://img.haomeiwen.com/i5342868/872bd550fb50508e.png)
onmousedown,onmouseup 以及 onclick 事件
onmousedown, onmouseup 以及 onclick 构成了鼠标点击事件的所有部分。首先当点击鼠标按钮时,会触发 onmousedown 事件,当释放鼠标按钮时,会触发onmouseup 事件,最后当完成鼠标点击时,会触发onclick 事件。
<div onmousedown = "mDown(this)" onmouseup = "mUp(this)" style = "background-color: green; color: #FFF; width: 200px; padding: 40px"></div>
<script>
function mDown(obj) {
obj.style.backgroundColor = "124dEA";
obj.innerHTML = "请释放鼠标按钮";
}
function mUp(obj) {
obj.style.backgroundColor = "green";
obj.innerHTML = "请按下鼠标按钮";
}
</script>
![](https://img.haomeiwen.com/i5342868/f0b885d3a566c407.png)
onfocus 事件
<input type = "text" onfocus = "myf(this)">
<script>
function myf(x) {
x.style.background = "red";
}
</script>
![](https://img.haomeiwen.com/i5342868/35b64f44c1c9bb3c.png)
DOM 元素(节点)
添加和删除节点(HTML元素)
创建新的 HTML元素
如需向 HTML DOM 添加新元素,必须首先创建该元素(元素节点),然后向一个已存在的元素追加该元素。
<div id = "dl">
<p>一个段落。</p>
<p>又一个段落。</p>
</div>
<script>
var para = document.createElement("p"); //创建新的<p>元素
var node = document.createTextNode("一个新段落。"); //创建文本节点
para.appendChild(node); //向<p>元素 追加这个文本节点
var ele = document.getElementById("dl"); // 找到已有元素
ele.appendChild(para); //追加新元素
</script>
![](https://img.haomeiwen.com/i5342868/bdf7764d7521b4f9.png)
删除已有的 HTML 元素
如需删除 HTML元素,必须首先获得该元素的父元素:
<div id = "dl">
<p id = "p1">一个段落</p>
<p id = "p2">有一个段落</p>
</div>
<script>
var parent = document.getElementById("dl"); //找到 id = "dl" 的元素
var chi = document.getElementById("p1"); //找到 id = "p1" 的元素
parent.removeChild(chi); //从父元素中删除子元素
</script>
![](https://img.haomeiwen.com/i5342868/86f0011bd1bc2147.png)
找到希望删除的子元素,然后使用其 parentNode 属性来找到父元素:
var child = document.getElementById("p1"); //找到 id = "p1" 的元素
child.parentNode.removeChid(child); //使用其 parentNode 属性来找到父元素