JavaScript练习笔记(2)

二、JS HTML DOM

目录

二、JS HTML DOM

1.JavaScript事件

1.1.当用户在 h1 元素上点击时,会改变其内容:

1.2.点击按钮执行 displayDate() 函数:

1.3.onload 事件会在用户进入页面时被触发:

1.4.onunload 事件会在用户离开页面时被触发:

1.5.onmouseover 和 onmouseout 事件可用于在用户的鼠标移至 HTML 元素上方或移出元素时触发函数:

1.6.onmousedown 和 onmouseup 按下鼠标按钮时,更换一幅图像,松开恢复原来的图片:

2.addEventListener() 方法

2.1.在用户点击按钮时触发监听事件:

2.2.当用户点击元素时弹出 "Hello World!" :

2.3.使用 addEventListener() 方法向同个按钮中添加两个点击事件。

2.4.向同个元素添加不同类型的事件

2.5.向 Window 对象添加事件句柄

2.6.使用 addEventListener() 方法时如何传递参数

2.7.事件冒泡或事件捕获?

2.8.removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:

3.添加和移除元素(节点)。

3.1.创建新的 HTML 元素 (节点) - appendChild()

3.2.将新元素添加到开始位置,可以使用 insertBefore() 方法:

3.3.移除已存在的元素

3.4.替换 HTML 元素 - replaceChild()

4.HTMLCollection 对象

4.1.以下代码获取文档所有的 p 元素:

4.2.HTMLCollection 对象的 length 属性定义了集合中元素的数量。

4.3.修改所有 p 元素的背景颜色:

5.NodeList 对象

5.1.访问第二个 p 元素

5.2.NodeList 对象 length 属性

5.3.修改节点列表中所有 p 元素的背景颜色:


1.JavaScript事件

在以下实例中,按钮元素中添加了 onclick 属性 (并加上代码):

<button onclick="getElementById('demo1').innerHTML=Date()">现在的时间是?</button>
<p id="demo1"></p>

以上实例中,JavaScript 代码将修改 id="demo" 元素的内容。

在下一个实例中,代码将修改自身元素的内容 (使用 this.innerHTML):

<button onclick="this.innerHTML=Date()">现在的时间是?</button>
JavaScript代码通常是几行代码。比较常见的是通过事件属性来调用:

<button onclick="displayDate()">现在的时间是?</button>
<script>
function displayDate(){
	document.getElementById("demo3").innerHTML=Date();
}
</script>
<p id="demo3"></p>
  • 常见的HTML事件

下面是一些常见的HTML事件的列表:

事件 描述
onchange HTML 元素改变
onclick 用户点击 HTML 元素
onmouseover 用户在一个HTML元素上移动鼠标
onmouseout 用户从一个HTML元素上移开鼠标
onkeydown 用户按下键盘按键
onload 浏览器已完成页面的加载

1.1.当用户在 h1 元素上点击时,会改变其内容:

<h1 onclick="this.innerHTML='Ooops-1'">改变其内容-1</h1>

<h1 onclick="changetext(this)">改变其内容-2</h1>
<script>
  function changetext(id){
    id.innerHTML="Ooops-2";
  }
</script>

执行结果: 

1.2.点击按钮执行 displayDate() 函数:

<button onclick="displayDate()">点这里执行 displayDate() 函数</button>
<script>
  function displayDate(){
	  document.getElementById("demo").innerHTML=Date();
  }
</script>
<p id="demo">点击按钮执行 displayDate() 函数.</p>

执行结果: 

1.3.onload 事件会在用户进入页面时被触发:

<body onload="checkCookies()">
<script>
  function checkCookies(){  
    if (navigator.cookieEnabled==true){
      alert("弹窗-提示浏览器 cookie 可用")
    }
    else{
      alert("弹窗-提示浏览器 cookie 不可用")
    }
  }
</script>

执行结果: 

1.4.onunload 事件会在用户离开页面时被触发:

<script>
  function myFunction(){
    var x=document.getElementById("fname");
    x.value=x.value.toUpperCase();
  }
</script>
离开输入框后 函数被触发,小写字母转为大写字母: <input type="text" id="fname" onchange="myFunction()">

1.5.onmouseover 和 onmouseout 事件可用于在用户的鼠标移至 HTML 元素上方或移出元素时触发函数:

<div onmouseover="mOver(this)" onmouseout="mOut(this)" style="background-color:#D94A38;width:120px;height:20px;padding:40px;">Mouse Over Me</div>
<script>
  function mOver(obj){
	  obj.innerHTML="Thank You"
  }
  function mOut(obj){
  	obj.innerHTML="Mouse Over Me"
  }
</script>

执行结果: 

<h1 onmouseover="style.color='red'"onmouseout="style.color='black'">将鼠标移至文本上改变颜色</h1>

执行结果: 

1.6.onmousedown 和 onmouseup 按下鼠标按钮时,更换一幅图像,松开恢复原来的图片:

<script>
  function lighton(){
    document.getElementById('myimage').src="./images/image_b.png";
  }
  function lightoff(){
    document.getElementById('myimage').src="./images/image_a.png";
  }
</script>
<img id="myimage" onmousedown="lighton()" onmouseup="lightoff()" src="./images/image_a.png" width="60" height="60" />

执行结果: 

 

2.addEventListener() 方法

addEventListener() 方法为指定元素指定事件处理程序。

addEventListener() 方法为元素附加事件处理程序而不会覆盖已有的事件处理程序。

您能够向一个元素添加多个事件处理程序。

您能够向一个元素添加多个相同类型的事件处理程序,例如两个 "click" 事件。

您能够向任何 DOM 对象添加事件处理程序而非仅仅 HTML 元素,例如 window 对象。

addEventListener() 方法使我们更容易控制事件如何对冒泡作出反应。

当使用 addEventListener() 方法时,JavaScript 与 HTML 标记是分隔的,已达到更佳的可读性;即使在不控制 HTML 标记时也允许您添加事件监听器。

您能够通过使用 removeEventListener() 方法轻松地删除事件监听器。

2.1.在用户点击按钮时触发监听事件:

<button id="myBtn">在按钮中添加点击事件</button>
<p id="demo"></p>
<script>
    document.getElementById("myBtn").addEventListener("click", displayDate);
    function displayDate() {
        document.getElementById("demo").innerHTML = Date();
    }
</script>

执行结果:

2.2.当用户点击元素时弹出 "Hello World!" :

<button id="myBtn">在按钮中添加点击事件</button>
<script>
    document.getElementById("myBtn").addEventListener("click", function(){
        alert("Hello World!");
    });
</script>

执行结果: 

2.3.使用 addEventListener() 方法向同个按钮中添加两个点击事件。

<button id="myBtn">向同个按钮添加两个点击事件</button>
<script>
    var x = document.getElementById("myBtn");
    x.addEventListener("click",myFunction);
    x.addEventListener("click",someOtherFunction);
    function myFunction() {
        alert ("Hello World!")
    }
    function someOtherFunction(){
        alert ("Cathy函数已执行!")
    }
</script>

2.4.向同个元素添加不同类型的事件

<button id="myBtn">向同个元素添加不同类型的事件</button>
<p id="demo"></p>
<script>
    var x = document.getElementById("myBtn");
    x.addEventListener("mouseover",myFunction);
    x.addEventListener("click",mySecondFunction);
    x.addEventListener("mouseout",myThirdFunction);
    function myFunction() {
        document.getElementById("demo").innerHTML += "Moused over!  鼠标移进来!<br>"
    }
    function mySecondFunction() {
        document.getElementById("demo").innerHTML += "Moused Clicked!  点击鼠标!<br>"
    }
    function myThirdFunction() {
        document.getElementById("demo").innerHTML += "Moused out!  移开鼠标!<br>"
    }
</script>

执行结果:

2.5.向 Window 对象添加事件句柄

<p>实例在 window 对象中使用 addEventListener() 方法。</p>
<p>尝试重置浏览器的窗口触发 "resize" 事件句柄。</p>
<p id="demo"></p>
<script>
    window.addEventListener("resize",function() {
        document.getElementById("demo").innerHTML = Math.random();
    });
</script>

执行结果:

2.6.使用 addEventListener() 方法时如何传递参数

<button id="myBtn">传递参数值,计算p1乘p2</button>
<p id="demo"></p>
<script>
    var p1 = 7;
    var p2 = 9;
    document.getElementById("demo").innerHTML=p1 + "*" + p2 + "=" ;
    document.getElementById("myBtn").addEventListener("click",function() {
        myFunction(p1, p2);
    });
    function myFunction(a, b) {
        var result = a * b;
        document.getElementById("demo").innerHTML = result;
    }
</script>

执行结果:

2.7.事件冒泡或事件捕获?

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

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

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

<style>
    div {
        background-color: coral;
        border: 1px solid;
        padding: 50px;
    }
</style>
<p>实例演示了在添加不同事件监听时,冒泡与捕获的不同。</p>
<div id="myDiv">
    <p id="myP">点击段落,我是冒泡。</p>
</div><br>
<div id="myDiv2">
    <p id="myP2">点击段落,我是捕获。</p>
</div><br>

<script>
    document.getElementById("myP").addEventListener("click",function() {
        alert("你点击了 p 元素!");
    },false);
    document.getElementById("myDiv").addEventListener("click",function() {
        alert("你点击了 DIV 元素!");
    },false);
    document.getElementById("myP2").addEventListener("click",function() {
        alert("你点击了 P2 元素!");
    },true);
    document.getElementById("myDiv2").addEventListener("click",function() {
        alert("你点击了 DIV2 元素!");
    },true);
</script>

2.8.removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:

<style>
    #myDIV{
        background-color: coral;
        border: 1px solid;
        padding: 20px;
        width: 200px;
        color: blue;
    }
</style>
<div id="myDIV">div 元素添加了 onmousemove 事件句柄,鼠标在橘红色的框内移动时会显示随机数。
    <button onclick="removeHandler()" id="myBtn">点击按钮移除 DIV 的事件句柄</button>
</div>
<p id="demo"></p>
<script>
    //div 元素添加了 onmousemove 事件句柄,鼠标在橘红色的框内移动时会显示随机数。
    document.getElementById("myDIV").addEventListener("mousemove", myFunction);
    function myFunction() {
        document.getElementById("demo").innerHTML = Math.random();
    }
    function removeHandler() {
        document.getElementById("myDIV").removeEventListener("mousemove",myFunction);//移除 DIV 的事件句柄
    }
</script>

3.添加和移除元素(节点)。

3.1.创建新的 HTML 元素 (节点) - appendChild()

要创建新的 HTML 元素 (节点)需要先创建一个元素,然后在已存在的元素中添加它。

<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);                                  //将文本节点添加到 <p> 元素中
    var element = document.getElementById("div1");           //查找已存在的元素
    element.appendChild(para);                               //在已存在的元素中添加它
</script>

执行结果:

3.2.将新元素添加到开始位置,可以使用 insertBefore() 方法:

<div id="div1">
    <p id="p1">这是一个段落。</p>
    <p id="p2">这是另一个段落。</p>
</div>
<script>
    var para = document.createElement("p");                  //创建 <p> 元素
    var node = document.createTextNode("这是一个新的段落。");  //为 <p> 元素创建一个新的文本节点
    para.appendChild(node);                                  //将文本节点添加到 <p> 元素中
    var element = document.getElementById("div1");           //查找已存在的元素
    var child = document.getElementById("p1");               //找到 p1 元素
    element.insertBefore(para, child);                       //添加到 p1 的前面
</script>

执行结果:

3.3.移除已存在的元素

要移除一个元素,你需要知道该元素的父元素。

<div id="div1">
    <p id="p1">这是第一个段落。</p>
    <p id="p2">这是第二个段落。</p>
</div>
<script>
    var parent = document.getElementById("div1");   //查找 div1 元素
    var child = document.getElementById("p1");      //查找 p1 段落
    parent.removeChild(child);                      //删除段落
</script>

执行结果:

3.4.替换 HTML 元素 - replaceChild()

我们可以使用 replaceChild() 方法来替换 HTML DOM 中的元素。

<div id="div1">
    <p id="p1">这是第一个段落。</p>
    <p id="p2">这是第二个段落。</p>
</div>
<script>
    var para = document.createElement("p");         //创建 <p> 元素
    var node = document.createTextNode("这是一个新的段落。This is a new paragraph. ");//为<p>元素添加文本节点
    para.appendChild(node);                         //将文本节点添加到 <p> 元素中

    var parent = document.getElementById("div1");   //查找 <div> 元素
    var child = document.getElementById("p1");      //查找 <p1> 元素
    parent.replaceChild(para,child);                //用 replaceChild() 方法来替换 <p1> 元素
</script>

执行结果:

4.HTMLCollection 对象

4.1.以下代码获取文档所有的 p 元素:

集合中的元素可以通过索引(以 0 为起始位置)来访问。

<h2>Cathy</h2>
<h2>JavaScript HTML DOM</h2>
<P>Hello World!</P>
<p>Hello Runoob!</p>
<p id="demo1"></p>
<p id="demo2"></p>
<p id="demo3"></p>
<script>
    var myCollection = document.getElementsByTagName("h2"); //获取文档所有的 <h2> 元素
    document.getElementById("demo1").innerHTML = "第一个h1标题的内容为:<span style='color:blue'>" + myCollection[0].innerHTML + '</span>'; 
    var myCollection = document.getElementsByTagName("p"); //获取文档所有的 <p> 元素
    document.getElementById("demo2").innerHTML = "第一个段落的内容为:<span style='color:blue'>" + myCollection[0].innerHTML + '</span>'; 
    document.getElementById("demo3").innerHTML = "第二个段落的内容为:<span style='color:red'>" + myCollection[1].innerHTML + '</span>';
</script>

执行结果:

4.2.HTMLCollection 对象的 length 属性定义了集合中元素的数量。

<P>Hello World!</P>
<p>Hello Runoob!</p>
<p id="demo"></p>
<script>
    var myCollection = document.getElementsByTagName("p");
    document.getElementById("demo").innerHTML = "文档包含" + myCollection.length + " 个段落。";
</script>

执行结果:

4.3.修改所有 p 元素的背景颜色:

<h2>JavaScript HTML DOM</h2>
<p>Hello World!</p>
<p>Hello Runoob!</p>
<button onclick="myFunction()">修改所有 p 元素的背景颜色</button>
<script>
    function myFunction() {
        var myCollection = document.getElementsByTagName("p");  //获取文档所有的 <p> 元素
        var i;
        for (i = 0;i < myCollection.length; i++) {
            myCollection[i].style.color = "red";                //修改 <p> 元素的背景颜色
        }
    }
</script>

5.NodeList 对象

5.1.访问第二个 p 元素

所有浏览器的 childNodes 属性返回的是 NodeList 对象。

<h2>JavaScript HTML DOM!</h2>
<p>Hello World!</p>
<P>Hello Runoob!</P>
<p id="demo"></p>
<script>
    var myNodelist = document.querySelectorAll("p");        //选取了文档中所有的 <p> 节点
    document.getElementById("demo").innerHTML = "第二个段落的内容为:<span style='color:red;'>" + myNodelist[1].innerHTML + '</span>';
</script>

5.2.NodeList 对象 length 属性

<h2>JavaScript HTML DOM!</h2>
<P>Hello World!</P>
<p id="demo2"></p>
<script>
    var myNodelist2 = document.querySelectorAll("p");
    document.getElementById("demo2").innerHTML = "文档包含 " + myNodelist2.length + " 个段落。";
</script>

5.3.修改节点列表中所有 p 元素的背景颜色:

<h2>JavaScript HTML DOM!</h2>
<P>Hello Cathy!</P>
<p>Hello Sam!</p>
<button onclick="myFunction()">点击按钮修改所有 p 元素的背景颜色</button>
<script>
    function myFunction() {
        var myNodelist = document.querySelectorAll("p");
        var i;
        for (i = 0; i < myNodelist.length; i++) {
            myNodelist[i].style.color = "red";
        }
    }
</script>

 

猜你喜欢

转载自blog.csdn.net/qq_35831134/article/details/115282917