JavaScript之DOM模型
DOM模型
通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。
DOM:Document Object Model,文档对象模型。
当网页被加载时,浏览器会创建页面的文档对象模型。
HTML DOM 模型被构造为对象的树:
通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。
- JavaScript 能够改变页面中的所有 HTML 元素
- JavaScript 能够改变页面中的所有 HTML 属性
- JavaScript 能够改变页面中的所有 CSS 样式
- JavaScript 能够对页面中的所有事件做出反应
document对象
当浏览器载入 HTML 文档, 它就会成为 Document 对象。
Document 对象是 HTML 文档的根节点。
Document 对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
提示:Document 对象是 Window 对象的一部分,可通过 window.document 属性对其进行访问。
document对象常用方法
查找HTML元素常用方法
方法 | 描述 |
---|---|
document.getElementById() | 返回对拥有指定id的第一个对象的引用 |
document.getElementsByClassName() | 返回文档中所有指定类名的元素集合,作为NodeList对象 |
document.getElementsByTagName() | 返回带有指定标签名的对象集合 |
document.getElementsByName() | 返回带有指定名称的对象集合 |
示例:
<script>
function myLoad() {
//页面加载完毕之后再去获取页面上的元素,否则获取不到
//根据ID 获取元素,只能获取到唯一元素(如果有重名的ID元素,获取到的是第一个元素)
var div = document.getElementById("myDiv");
console.log(div);
//根据指定的类样式的名称获取元素,返回集合
var list = document.getElementsByClassName("demo");
console.log("根据类样式的名称获取到的元素的集合长度是:" + list.length);
for(var i = 0; i < list.length; i++) {
console.log(list[i]);
}
//根据指定HTML标签名称获取元素,返回集合
var list2 = document.getElementsByTagName("li");
console.log("根据标签的名称获取到的元素的集合长度是:" + list2.length);
for(var i = 0; i < list2.length; i++) {
console.log(list2[i]);
}
//根据指定HTML元素的name属性获取元素,返回集合
var list3 = document.getElementsByName("myli");
console.log("根据标签的名称属性获取到的元素的集合长度是:" + list3.length);
for(var i = 0; i < list3.length; i++) {
console.log(list3[i]);
}
}
</script>
<body onload="myLoad()">
<p class="demo"></p>
<div id="myDiv" class="demo">
div
</div>
<ul class="demo">
<li>li11111111111</li>
<li name="myli">li11111111111</li>
<li>li11111111111</li>
<li name="myli">li11111111111</li>
</ul>
</body>
输出结果如下:
修改HTML内容和属性
- 修改内容
修改 HTML 内容的最简单的方法是使用 innerHTML 属性。
修改 HTML 元素的内容的语法:
document.getElementById(id).innerHTML=新的 HTML。
PS: 绝对不要在文档(DOM)加载完成之后使用 document.write()。这会覆盖该文档。
- 修改 HTML 属性
修改 HTML 元素属性的语法:
方式1:document.getElementById(id).attribute=新属性值
方式2:document.getElementById(id).setAttribute(属性名,属性值);
<body>
<h1 style="color: green;" id="myh1" class="bf">hello world</h1>
<script>
var h1 = document.getElementById("myh1");
console.log(h1.getAttribute("class"));
h1.setAttribute("class", "bg"); //设置属性
console.log(h1.getAttribute("class"));
console.log(h1.getAttribute("style"));
</script>
</body>
修改HTML元素的CSS
修改 HTML 元素css的语法:
document.getElementById(id).style.property=新样式
document.getElementById("myli").style.color="blue";
document.getElementById("myli").style.fontFamily="微软雅黑";
document.getElementById("myli").style.fontSize="24px";
HTML DOM元素(节点)
创建新的HTML元素
要创建新的 HTML 元素 (节点)需要先创建一个元素,然后在已存在的元素中添加它。
<button type="button" onclick="createNewP()">动态添加一个元素--appendChild</button>
<button type="button" onclick="createNewP2()">动态添加一个元素--insertBefore</button>
<div id="div1">
<p id="p1">这是段落1</p>
<p id="p2">这是段落2</p>
</div>
<script>
function createNewP() {
var newElementP = document.createElement("p"); //创建一个新的段落元素
var text = document.createTextNode("这是我新创建的段落"); //新创建的文本节点
//将文本的节点添加到新创建的元素中
newElementP.appendChild(text);
//获取一个页面已经存在的元素
var div = document.getElementById("div1");
//添加新创建的元素p到已经存在的元素div中
div.appendChild(newElementP);
}
function createNewP2() {
var newElementP = document.createElement("p"); //创建一个新的段落元素
var text = document.createTextNode("这是我新创建的段落p2"); //新创建的文本节点
//将文本的节点添加到新创建的元素中
newElementP.appendChild(text);
//获取一个页面已经存在的元素
var div = document.getElementById("div1");
var p1 = document.getElementById("p1");
//添加新创建的元素p到已经存在的元素div中,指定插入到段落P1前面
div.insertBefore(newElementP, p1);
}
</script>
未点击添加元素时
通过appendChild添加
通过insertBefore添加
替换HTML元素-replaceChild()
<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另外一个段落。</p>
</div>
<button type="button" onclick="changeElemnt()">替换p1</button>
<script>
function changeElemnt() {
var newElementP = document.createElement("p"); //创建一个新的段落元素
var text = document.createTextNode("这是我新创建的段落p"); //新创建的文本节点
//将文本的节点添加到新创建的元素中
newElementP.appendChild(text);
//获取要被替换的元素p1及其父元素div
var div = document.getElementById("div1");
var p1 = document.getElementById("p1");
//将div中的元素p1替换为新创建的元素
div.replaceChild(newElementP, p1);
}
</script>
初始时:
点击替换后:
删除元素-removeChild()
<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另外一个段落。</p>
</div>
<button type="button" onclick="deleteElement()">删除p1-方式1</button>
<button type="button" onclick="deleteElement()">删除p1-方式2</button>
<script>
function deleteElement() {
var div = document.getElementById("div1");
var p1 = document.getElementById("p1");
//从父元素div中删除子元素p1
div.removeChild(p1);
}
function deleteElement2() {
var p1 = document.getElementById("p1");
//p1.parentNode:作用就是获取要删除元素p1的父元素div
p1.parentNode.removeChild(p1);
}
</script>
初始化:
点击删除后: