part5 javascript DOM

DOM

HTML DOM

通过HTML DOM ,可以访问JavaScrip HTML 文档的所有的元素

image-20220222152929247

通过可编程的对象模型,JavaScript 获得了足够的能力来创建动态的 HTML。

  • JavaScript 能够改变页面中的所有 HTML 元素

  • JavaScript 能够改变页面中的所有 HTML 属性

  • JavaScript 能够改变页面中的所有 CSS 样式

  • JavaScript 能够对页面中的所有事件做出反应

查找HTML 元素

  1. id查找

var x=document.getElementById("intro");//id=intro

如果找到该元素,则该方法将以对象(在 x 中)的形式返回该元素到x。

如果未找到该元素,则 x 将包含 null。

  1. 通过类名

var x=document.getElementsByClassName("intro");
  1. 通过标签名

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>

image-20220222181205376

Hello World!被改成新文本

  • 上面的 HTML 文档含有 id="p1" 的 <p> 元素

  • 我们使用 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" 的 <img> 元素

  • 我们使用 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;
});//用户重置窗口大小时添加事件监听

事件传递

事件传递定义了元素事件触发的顺序。 如果你将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素, 哪个元素的 "click" 事件先被触发呢?

  • 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。

  • 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。

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集合

  1. var x = document.getElementsByTagName("p");//查找并放入x中
    y = x[1];//第二个元素
  2. var myCollection = document.getElementsByTagName("p");
    document.getElementById("demo").innerHTML = myCollection.length;//长度
  3. var myCollection = document.getElementsByTagName("p");
    var i;
    for (i = 0; i < myCollection.length; i++) {
       myCollection[i].style.backgroundColor = "red";
    }//改变<p>元素的背景颜色

DOM节点

NodeList对象类似HTMLCollection

  1. var myNodeList = document.querySelectorAll("p");
    y = myNodeList[1];//第二个元素
  2. var myNodelist = document.querySelectorAll("p");
    document.getElementById("demo").innerHTML = myNodelist.length;
  3. var myNodelist = document.querySelectorAll("p");
    var i;
    for (i = 0; i < myNodelist.length; i++) {
       myNodelist[i].style.backgroundColor = "red";
    }
  4.  

posted on 2022-02-22 22:45  阿娆要努力呀  阅读(23)  评论(0编辑  收藏  举报