DOM
HTML DOM
通过HTML DOM ,可以访问JavaScrip HTML 文档的所有的元素
通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。
- JavaScript 能够改变页面中的所有 HTML 元素
- JavaScript 能够改变页面中的所有 HTML 属性
- JavaScript 能够改变页面中的所有 CSS 样式
- JavaScript 能够对页面中的所有事件做出反应
查找HTML 元素
- id查找
var x=document.getElementById("intro");//id=intro
如果找到该元素,则该方法将以对象(在 x 中)的形式返回该元素到x。
如果未找到该元素,则 x 将包含 null。
- 通过类名
var x=document.getElementsByClassName("intro");
- 通过标签名
var x=document.getElementById("main");//id=main中所有的<p>标签
var y=x.getElementsByTagName("p");
改变HTML
在 JavaScript 中,document.write() 可用于直接向 HTML 输出流写内容。
<!DOCTYPE html>
<html>
<body>
<script>
document.write(Date());
</script>
</body>
</html>
绝对不要在文档(DOM)加载完成之后使用 document.write()。这会覆盖该文档。
改变HTML内容
//document.getElementById(id).innerHTML=新的 HTML
<p id="p1">Hello World!</p>
<script>
document.getElementById("p1").innerHTML="新文本!";
</script>
<p>以上段落通过脚本修改文本。</p>
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GpNbMVA9-1645536684200)(C:\Users\17730\AppData\Roaming\Typora\typora-user-images\image-20220222181205376.png)]
Hello World!被改成新文本
- 上面的 HTML 文档含有 id=“p1” 的
元素
- 我们使用 HTML DOM 来获得 id=“p1” 的元素
- JavaScript 更改此元素的内容 (innerHTML)
改变HTML属性
//document.getElementById(id).attribute=新属性值
<body>
<img id="image" src="smiley.gif">
<script>
document.getElementById("image").src="landscape.jpg";
</script>
</body>
- 上面的 HTML 文档含有 id=“image” 的 元素
- 我们使用 HTML DOM 来获得 id=“image” 的元素
- JavaScript 更改此元素的属性(把 “smiley.gif” 改为 “landscape.jpg”)
改变CSS
JavaScript HTML DOM 改变 CSS | 菜鸟教程 (runoob.com)
//document.getElementById(id).style.property=新样式
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<p id="p1">Hello World!</p>
<p id="p2">Hello World!</p>
<script> document.getElementById("p2").style.color="blue"; document.getElementById("p2").style.fontFamily="Arial"; document.getElementById("p2").style.fontSize="larger"; </script>
<p>以上段落通过脚本修改。</p>
</body>
</html>
HTML DOM 允许我们通过触发事件来执行代码。
DOM事件
JavaScript HTML DOM 事件 | 菜鸟教程 (runoob.com)
DOM EventListener
addEventListener
document.getElementById("myBtn").addEventListener("click", displayDate);//点击按钮出发监听事件
-
addEventListener() 方法用于向指定元素添加事件句柄。
-
addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。
-
可以向一个元素添加多个事件句柄。
-
可以向同个元素添加多个同类型的事件句柄,如:两个 “click” 事件。
-
可以向任何 DOM 对象添加事件监听,不仅仅是 HTML 元素。如: window 对象。
-
addEventListener() 方法可以更简单的控制事件(冒泡与捕获)。
-
使用 addEventListener() 方法时, JavaScript 从 HTML 标记中分离开来,可读性更强, 在没有控制HTML标记时也可以添加事件监听。
-
使用 removeEventListener() 方法来移除事件的监听。
语法
element.addEventListener(event, function, useCapture);
-
第一个参数是事件的类型 (如 “click” 或 “mousedown”).
-
第二个参数是事件触发后调用的函数。
-
第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。
向原元素添加事件句柄
element.addEventListener("click", function(){ alert("Hello World!"); });//点击元素时弹出
//引用外部函数
element.addEventListener("click", myFunction);
function myFunction() {
alert ("Hello World!");
}//点击元素时弹出
向同一个元素中添加多个事件句柄
element.addEventListener("click", myFunction);
element.addEventListener("click", mySecondFunction);
element.addEventListener("mouseover", myFunction);
element.addEventListener("click", mySecondFunction);
element.addEventListener("mouseout", myThirdFunction);
允许向同一个元素添加多个事件,且不会覆盖已存在的事件
向Window对象添加事件句柄
window.addEventListener("resize", function(){
document.getElementById("demo").innerHTML = sometext;
});//用户重置窗口大小时添加事件监听
事件传递
事件传递定义了元素事件触发的顺序。 如果你将
元素插入到
元素中,用户点击元素, 哪个元素的 “click” 事件先被触发呢?
- 在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即:
元素的点击事件先触发,然后会触发
元素的点击事件。 - 在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即:
元素的点击事件先触发 ,然后再触发
元素的点击事件。
addEventListener() 方法可以指定 “useCapture” 参数来设置传递类型:
addEventListener(event, function, useCapture);
useCapture:默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。
removeEventListener()方法
element.removeEventListener("mousemove", myFunction);
DOM元素节点
appendChild()添加在末尾位置
要创建新的HTML元素需要先创建一个元素,然会在一窜在的元素中添加
//这个是菜鸟里的例子
<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另外一个段落。</p>
</div>
<script>
var para = document.createElement("p");//用于创建<p>元素
var node = document.createTextNode("这是一个新的段落。");//船舰一个新的文本节点
para.appendChild(node);//将文本添加到<p>中
var element = document.getElementById("div1");//在一个已存在的元素中添加p元素
element.appendChild(para);添加到已存在的元素中
</script>
insertBefore()添加到开始位置
移除已存在的元素
<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另外一个段落。</p>
</div>
<script>
var parent = document.getElementById("div1");//查找
var child = document.getElementById("p1");//查找
parent.removeChild(child);//移除
</script>
替换 replaceChild()
<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另外一个段落。</p>
</div>
<script>
var para = document.createElement("p");
var node = document.createTextNode("这是一个新的段落。");
para.appendChild(node);
var parent = document.getElementById("div1");
var child = document.getElementById("p1");
parent.replaceChild(para, child);
</script>
DOM集合
-
var x = document.getElementsByTagName("p");//查找并放入x中 y = x[1];//第二个元素
-
var myCollection = document.getElementsByTagName("p"); document.getElementById("demo").innerHTML = myCollection.length;//长度
-
var myCollection = document.getElementsByTagName("p"); var i; for (i = 0; i < myCollection.length; i++) { myCollection[i].style.backgroundColor = "red"; }//改变<p>元素的背景颜色
DOM节点
NodeList对象类似HTMLCollection
-
var myNodeList = document.querySelectorAll("p"); y = myNodeList[1];//第二个元素
-
var myNodelist = document.querySelectorAll("p"); document.getElementById("demo").innerHTML = myNodelist.length;
-
var myNodelist = document.querySelectorAll("p"); var i; for (i = 0; i < myNodelist.length; i++) { myNodelist[i].style.backgroundColor = "red"; }
ectorAll(“p”);
document.getElementById(“demo”).innerHTML = myNodelist.length;
3. ```javascript
var myNodelist = document.querySelectorAll("p");
var i;
for (i = 0; i < myNodelist.length; i++) {
myNodelist[i].style.backgroundColor = "red";
}