227 前端之JavaScript:JS之DOM对象二

前面在JS之DOM中我们知道了属性操作,下面我们来了解一下节点操作。很重要!!

一、节点操作

创建节点:var ele_a = document.createElement('a');
添加节点:ele_parent.appendChild(ele_img);
删除节点:ele_parent.removeChild(ele_p);
替换节点:ele_parent.replaceChild(新标签,旧标签);
  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>节点操作</title>
  6     <style>
  7         .c1 {
  8             width: 300px;
  9             height: 200px;
 10             border: 1px solid red;
 11         }
 12     </style>
 13 </head>
 14 <body>
 15 <div class="c1">
 16     <p id="p1">年后</p>
 17     <p id="p2">hello</p>
 18 </div>
 19 <button class="addBtn">ADD</button>
 20 <button class="delBtn">DEL</button>
 21 <button class="replaceBtn">Replace</button>
 22 <ul>
 23     <li>创建节点:var ele_a = document.createElement('a');</li>
 24     <li>添加节点:ele_parent.appendChild(ele_img);</li>
 25     <li>删除节点:ele_parent.removeChild(ele_p);</li>
 26     <li>替换节点:ele_parent.replaceChild(新标签,旧标签);</li>
 27 </ul>
 28 <table border="1">
 29     <tbody id="t1">
 30         <tr>
 31             <td><input type="checkbox"></td>
 32             <td><input type="text"></td>
 33             <td><button class="delbtn">del1</button></td>
 34         </tr>
 35         <tr>
 36             <td><input type="checkbox"></td>
 37             <td><input type="text"></td>
 38             <td><button class="delbtn">del2</button></td>
 39         </tr>
 40         <tr>
 41             <td><input type="checkbox"></td>
 42             <td><input type="text"></td>
 43             <td><button class="delbtn">del3</button></td>
 44         </tr>
 45         <tr>
 46             <td><input type="checkbox"></td>
 47             <td><input type="text"></td>
 48             <td><button class="delbtn">del4</button></td>
 49         </tr>
 50     </tbody>
 51 </table>
 52 <script>
 53     var ele_add = document.getElementsByClassName('addBtn')[0];
 54     var ele_del = document.getElementsByClassName('delBtn')[0];
 55     var ele_repleace = document.getElementsByClassName('replaceBtn')[0];
 56     console.log(ele_add);
 57     //绑定的添加节点的事件
 58     ele_add.onclick = function () {
 59         //先创建一个标签
 60         var ele_a = document.createElement('a');
 61         console.log(ele_a); //<a></a>
 62         ele_a.innerHTML = '点击'; //<a>点击</a>
 63         ele_a.href = 'http://www.baidu.com'; //<a href='http://www.baidu.com'>点击</a>
 64         //先创建一个标签
 65         var ele_img = document.createElement('img');
 66         ele_img.src = '1.png';
 67         ele_img.width = 50;
 68         ele_img.height = 50;
 69         //找到父标签
 70         var ele_parent = document.getElementsByClassName('c1')[0];
 71         //然后添加
 72         ele_parent.appendChild(ele_a);
 73         ele_parent.appendChild(ele_img);
 74     };
 75     //绑定的删除节点的事件
 76     ele_del.onclick = function () {
 77         //先获取要删除的元素
 78         var ele_p = document.getElementById('p1');
 79         //获取它的父元素
 80         var ele_parent = document.getElementsByClassName('c1')[0];
 81         //然后删除(注意是父元素删除子元素)
 82         ele_parent.removeChild(ele_p)
 83     };
 84     //绑定的替换节点的事件
 85     ele_repleace.onclick = function () {
 86         //找被替换的标签(旧标签)
 87         var ele_p = document.getElementById('p2');
 88         //创建一个替换后的标签(新标签)
 89         var ele_img = document.createElement('img');
 90         ele_img.src = '2.png';
 91         ele_img.width = 100;
 92         ele_img.height = 50;
 93         //找到父节点
 94         var ele_parent = document.getElementsByClassName('c1')[0];
 95         //做替换(父节点替换子节点中的某一个节点):相当于一次删除加一次添加
 96         ele_parent.replaceChild(ele_img, ele_p);
 97     }
 98 </script>
 99 <script>
100     //绑定删除节点的事件
101     var ele_dels = document.getElementsByClassName('delbtn');
102     for(var i=0;i<ele_dels.length;i++){
103         ele_dels[i].onclick = function () {
104             //获取删除的元素
105             var ele_tr = this.parentElement.parentElement;
106 //            console.log(ele_tr)
107             //找到父节点
108             var ele_tbody_parent =document.getElementById('t1');
109             //然后删除
110             ele_tbody_parent.removeChild(ele_tr)
111         }
112     }
113 </script>
114 </body>
115 </html>
具体的节点操作实例

事件类型

onclick        当用户点击某个对象时调用的事件句柄。
ondblclick     当用户双击某个对象时调用的事件句柄。

onfocus        元素获得焦点。               练习:输入框
onblur         元素失去焦点。               应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange       域的内容被改变。             应用场景:通常用于表单元素,当元素内容被改变时触发.(三级联动)

onkeydown      某个键盘按键被按下。          应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress     某个键盘按键被按下并松开。
onkeyup        某个键盘按键被松开。

onload         一张页面或一幅图像完成加载。

onmousedown    鼠标按钮被按下。
onmousemove    鼠标被移动。
onmouseout     鼠标从某元素移开。
onmouseover    鼠标移到某元素之上。
onmouseleave   鼠标从元素离开

onselect       文本被选中。
onsubmit       确认按钮被点击。

二、onload事件

onload 属性开发中 只给 body元素加.这个属性的触发 标志着 页面内容被加载完成.应用场景: 当有些事情我们希望页面加载完立刻执行,那么可以使用该事件属性.

什么时候加载完什么时候触发(如果你想把script放在body上面去,就用到onload事件了)

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 <head>
  4     <meta charset="UTF-8">
  5     <title>节点操作</title>
  6     <style>
  7         .c1 {
  8             width: 300px;
  9             height: 200px;
 10             border: 1px solid red;
 11         }
 12     </style>
 13     <script>
 14         //如果要把script写在body的上面就可以用onload事件
 15         //onload什么时候加载完什么时候触发这个事件
 16         window.onload = function () {
 17             var ele_add = document.getElementsByClassName('addBtn')[0];
 18             var ele_del = document.getElementsByClassName('delBtn')[0];
 19             var ele_repleace = document.getElementsByClassName('replaceBtn')[0];
 20             console.log(ele_add);
 21             //绑定的添加节点的事件
 22             ele_add.onclick = function () {
 23                 //先创建一个标签
 24                 var ele_a = document.createElement('a');
 25                 console.log(ele_a); //<a></a>
 26                 ele_a.innerHTML = '点击'; //<a>点击</a>
 27                 ele_a.href = 'http://www.baidu.com'; //<a href='http://www.baidu.com'>点击</a>
 28                 //先创建一个标签
 29                 var ele_img = document.createElement('img');
 30                 ele_img.src = '1.png';
 31                 ele_img.width = 50;
 32                 ele_img.height = 50;
 33                 //找到父标签
 34                 var ele_parent = document.getElementsByClassName('c1')[0];
 35                 //然后添加
 36                 ele_parent.appendChild(ele_a);
 37                 ele_parent.appendChild(ele_img);
 38             };
 39             //绑定的删除节点的事件
 40             ele_del.onclick = function () {
 41                 //先获取要删除的元素
 42                 var ele_p = document.getElementById('p1');
 43                 //获取它的父元素
 44                 var ele_parent = document.getElementsByClassName('c1')[0];
 45                 //然后删除(注意是父元素删除子元素)
 46                 ele_parent.removeChild(ele_p)
 47             };
 48             //绑定的替换节点的事件
 49             ele_repleace.onclick = function () {
 50                 //找被替换的标签(旧标签)
 51                 var ele_p = document.getElementById('p2');
 52                 //创建一个替换后的标签(新标签)
 53                 var ele_img = document.createElement('img');
 54                 ele_img.src = '2.png';
 55                 ele_img.width = 100;
 56                 ele_img.height = 50;
 57                 //找到父节点
 58                 var ele_parent = document.getElementsByClassName('c1')[0];
 59                 //做替换(父节点替换子节点中的某一个节点):相当于一次删除加一次添加
 60                 ele_parent.replaceChild(ele_img, ele_p);
 61             };
 62             //表格绑定删除节点的事件
 63             var ele_dels = document.getElementsByClassName('delbtn');
 64             for (var i = 0; i < ele_dels.length; i++) {
 65                 ele_dels[i].onclick = function () {
 66                     //获取删除的元素
 67                     var ele_tr = this.parentElement.parentElement;
 68 //            console.log(ele_tr)
 69                     //找到父节点
 70                     var ele_tbody_parent = document.getElementById('t1');
 71                     //然后删除
 72                     ele_tbody_parent.removeChild(ele_tr)
 73                 }
 74             }
 75         }
 76     </script>
 77 </head>
 78 <body>
 79 <div class="c1">
 80     <p id="p1">年后</p>
 81     <p id="p2">hello</p>
 82 </div>
 83 <button class="addBtn">ADD</button>
 84 <button class="delBtn">DEL</button>
 85 <button class="replaceBtn">Replace</button>
 86 <ul>
 87     <li>创建节点:var ele_a = document.createElement('a');</li>
 88     <li>添加节点:ele_parent.appendChild(ele_img);</li>
 89     <li>删除节点:ele_parent.removeChild(ele_p);</li>
 90     <li>替换节点:ele_parent.replaceChild(新标签,旧标签);</li>
 91 </ul>
 92 <table border="1">
 93     <tbody id="t1">
 94     <tr>
 95         <td><input type="checkbox"></td>
 96         <td><input type="text"></td>
 97         <td>
 98             <button class="delbtn">del1</button>
 99         </td>
100     </tr>
101     <tr>
102         <td><input type="checkbox"></td>
103         <td><input type="text"></td>
104         <td>
105             <button class="delbtn">del2</button>
106         </td>
107     </tr>
108     <tr>
109         <td><input type="checkbox"></td>
110         <td><input type="text"></td>
111         <td>
112             <button class="delbtn">del3</button>
113         </td>
114     </tr>
115     <tr>
116         <td><input type="checkbox"></td>
117         <td><input type="text"></td>
118         <td>
119             <button class="delbtn">del4</button>
120         </td>
121     </tr>
122     </tbody>
123 </table>
124 </body>
125 </html>
onload事件(基于节点操作的修改)
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 
 7     <script>
 8          /*
 9               window.onload=function(){
10                    var ele=document.getElementById("ppp");
11                    ele.onclick=function(){
12                    alert(123)
13                 };
14              };
15          
16          */
17 
18 
19 
20           function fun() {
21               var ele=document.getElementById("ppp");
22                ele.onclick=function(){
23                 alert(123)
24             };
25           }
26 
27     </script>
28 </head>
29 <body onload="fun()">
30 
31 <p id="ppp">hello p</p>
32 
33 </body>
34 </html>
onload示例二

三、onkeydown事件

Event 对象:Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。
事件通常与函数结合使用,函数不会在事件发生前被执行!event对象在事件发生时系统已经创建好了,并且会在事件函数被调用时传给事件函数.我们获得仅仅需要接收一下即可.比如onkeydown,我们想知道哪个键被按下了,需要问下event对象的属性,这里就时KeyCode.

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <input type="text" class="test">
 9 <input type="text" id="t1"/>
10 <script>
11     //测试event对象
12     var ele = document.getElementsByClassName('test')[0];
13 //    event :每次触发事件时所有的状态信息
14 //    event.keyCode :保存着所有的状态信息
15     ele.onkeydown =function (event) {
16 //        onkeydown按下键盘触发的事件
17         console.log(event);
18         console.log(event.keyCode);
19         if (event.keyCode==13){
20             //按回车就会弹出
21             alert(666)
22         }
23     }
24 </script>
25 <script type="text/javascript">
26     var ele=document.getElementById("t1");
27     ele.onkeydown=function(e){
28         e=e||window.event;
29         var keynum=e.keyCode;
30         var keychar=String.fromCharCode(keynum);
31 //        console.log(keynum); //每次键盘敲下的状态信息
32 //        console.log(keychar);  //输入的字符
33 //        alert(keynum);
34 //        alert(keychar)  //你键盘输入的字符
35     };
36 </script>
37 </body>
38 </html>
onkeydown事件

四、onsubmit事件

当表单在提交时触发. 该属性也只能给form元素使用.应用场景: 在表单提交前验证用户输入是否正确.如果验证失败.在该方法中我们应该阻止表单的提交.

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>onsubmit事件</title>
 6     <!--onsubmit事件:确定按钮被点击-->
 7     <!--在表单提交前验证用户输入是否正确.如果验证失败.在该方法中我们应该阻止表单的提交.-->
 8     <!--提交按钮本身就有一个默认事件(你点击提交的时候就会把数据发过去)-->
 9 
10 </head>
11 <body>
12 <form action="" id="submit">
13     <p>姓名:<input type="text" class="name"></p>
14     <p>年龄:<input type="text" class="age"></p>
15     <input type="submit">
16 </form>
17 <input type="text" class="test">
18 <script>
19     var ele_form = document.getElementById('submit');
20     var ele_name = document.getElementsByClassName('name')[0];
21     var ele_age = document.getElementsByClassName('age')[0];
22     ele_form.onsubmit = function (event) {
23         var username = ele_name.value;
24         var age = ele_age.value;
25         alert(username);
26         alert(age);
27         if (username=='haiyan'){
28             //阻止默认事件的两种方式
29 //            方式一:
30 //            return false;
31 //            方式二
32 //            给函数给一个形参,这个形参写什么都行,一般我们写成event
33             event.preventDefault() //阻止默认事件(表单的提交)
34         }
35     }
36 </script>
37 <script>
38     //测试event对象
39     var ele = document.getElementsByClassName('test')[0];
40 //    event :每次触发事件时所有的状态信息
41 //    event.keyCode :保存着所有的状态信息
42     ele.onkeydown =function (event) {
43 //        onkeydown按下键盘触发的事件
44         console.log(event);
45         console.log(event.keyCode);
46         if (event.keyCode==13){
47             //按回车就会弹出
48             alert(666)
49         }
50     }
51 </script>
52 </body>
53 </html>
onsubmit

五、事件传播

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>事件传播</title>
 6     <style>
 7         .box1 {
 8             width: 300px;
 9             height: 300px;
10             background-color: rebeccapurple;
11         }
12         .box2{
13             width: 150px;
14             height: 150px;
15             background-color: yellow;
16         }
17     </style>
18 </head>
19 <body>
20 <div class="box1">
21     <div class="box2"></div>
22 </div>
23 <script>
24     //因为盒子1是盒子2的父亲,所以当给父亲绑定一个事件,给儿子也绑定一个事件,就像
25 //    继承一样,儿子会继承父亲的事件,所以现在运行的时候如果点击盒子2,会把自己的是事件和
26 //    父亲的事件都执行了。所以如果只想让儿子执行自己的事件,那么就得阻止发生事件传播
27     var ele1 = document.getElementsByClassName('box1')[0];
28     var ele2 = document.getElementsByClassName('box2')[0];
29     ele1.onclick = function () {
30         alert(123)
31     };
32     ele2.onclick = function (event) {
33         alert(456);
34         console.log(event);
35         console.log(event.keyCode);
36         //    阻止事件传播的方式
37         event.stopPropagation();
38     };
39 
40 
41 </script>
42 </body>
43 </html>
事件传播

六、seach实例

模拟placeholder属性的功能
<input type="text" placeholder="username" id="submit">
placeholder和value的区别:
  placeholder:只是一个提示功能,不传值。
  value:是一个默认的值,如果你的输入框中不写数据的时候,它会把默认的数据发过去
 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>模拟placeholder属性的功能</title>
 6 </head>
 7 <body>
 8 <input type="text" placeholder="username" id="submit">
 9 <input type="text" value="username" id="submit1">
10 <script>
11 //    var ele = document.getElementById('submit1');
12     var ele = document.getElementById('submit1');
13     ele.onfocus = function () {
14         //先获取焦点,点击输入框就获取到焦点,光标一上去就把值设成空
15         this.value=""
16     };
17     ele.onblur = function () {
18 //        当光标不点击那个输入框的时候就失去焦点了
19         //当失去焦点的时候,判断当前的那个值是不是为空,是否含有空格
20 //        如果为空或者有空格,用trim()去掉空格。然后赋值为username
21         if (this.value.trim()==""){
22             this.value='username'
23         }
24     }
25 </script>
26 </body>
27 </html>
seach示例

 七、onchange事件

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>onchange事件</title>
 6 </head>
 7 <body>
 8 <select name="" id="s1">
 9     <option value="">甘肃省</option>
10     <option value="">安徽省</option>
11     <option value="">湖北省</option>
12 </select>
13 <script>
14     var ele = document.getElementById('s1');
15     //下拉菜单,和你当前事件不同的时候出发事件
16     ele.onchange= function () {
17         alert(123)
18     }
19 </script>
20 </body>
21 </html>
onchange

用onchange事件实现的二级联动

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>二级联动</title>
 6 </head>
 7 <body>
 8 <select name="" id="s1">
 9     <option value="">请选择省份</option>
10     <option value="gansu">甘肃省</option>
11     <option value="hebei">河北省</option>
12     <option value="henan">河南省</option>
13 </select>
14 <select name="" id="c1">
15     <option value="city">请选择城市</option>
16 </select>
17 <script>
18     var data = {'gansu':['兰州市','天水市','武威市'],'hebei':['保定','石家庄'],'henan':['郑州','开封']}
19     var ele_select = document.getElementById('s1');
20     var ele_critys = document.getElementById('c1');//父亲标签
21     ele_select.onchange  =function () {
22 //        alert(123)
23 //        console.log(this.value)
24         var ele_provice = this.value;
25         var citys = data[ele_provice];
26         console.log(citys);
27         //要在没有添加之间清空,不然你点一次添加一次,点一次添加一次
28         //方式一
29 //        ele_critys.children.length=1;  //不可行。。但是原理和方式二的一样
30         //方式二
31 //        ele_critys.options.length = 1; //留一个,一般多的是设成0了
32         for (var i =0;i<citys.length;i++) {
33             //创建一个option标签
34             var ele_option = document.createElement('option'); //<option></option>
35             ele_option.innerHTML = citys[i];  //得到有文本的option标签
36             ele_option.value = i + 1; //设置属性值
37             console.log(ele_option);
38             ele_critys.appendChild(ele_option);
39         }
40     }
41 </script>
42 
43 </body>
44 </html>
二级联动

八、onmouse事件

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>onmouse事件</title>
 6     <style>
 7         .box{
 8             width: 300%;
 9             height: 200px;
10         }
11         .title{
12             background: steelblue;
13             line-height: 40px;
14         }
15         .con{
16             background: slategray;
17             line-height: 30px;
18         }
19         .hide{
20             display: none;
21         }
22     </style>
23 </head>
24 <body>
25 <div class="box">
26     <div class="title">onmouse</div>
27     <div class="con hide">
28         <div><a href="" class="item">你好吗?</a></div>
29         <div><a href="" class="item">我好啊</a></div>
30         <div><a href="" class="item">好就好呗</a></div>
31     </div>
32 </div>
33 <script>
34     var ele_title = document.getElementsByClassName('title')[0];
35     var ele_box = document.getElementsByClassName('box')[0];
36     //鼠标指上去的事件
37     ele_title.onmouseover = function () {
38         this.nextElementSibling.classList.remove('hide');
39     };
40     //鼠标移走的事件的两种方式
41 //    方式一(推荐)
42      ele_box.onmouseleave= function () {
43         ele_title.nextElementSibling.classList.add('hide');
44     };
45 //    方式二
46 //    ele_title.onmouseout = function () {
47 //       this.nextElementSibling.classList.add('hide');
48 //    }
49 //    方式一和方式二的区别:
50 //    不同点
51 //      onmouseout:不论鼠标指针离开被选元素还是任何子元素,都会触发onmouseout事件
52 //      onmouseleave:只有在鼠标指针离开被选元素时,才会触发onmouseleave事件
53 //    相同点:都是鼠标移走触发事件
54 </script>
55 </body>
56 </html>
onmouse

九、事件委派

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件委派(委派给所有的子元素)</title>
</head>
<body>
<ul>
    <li>111</li>
    <li>222</li>
    <li>333</li>
</ul>
<button class="addbtn">点我添加</button>
</body>
<script>
    var ele_btn = document.getElementsByClassName('addbtn')[0];
    var ele_ul = document.getElementsByTagName('ul')[0];
    var ele_li =document.getElementsByTagName('li');
    //绑定事件
    for (var i=0;i<ele_li.length;i++){
        ele_li[i].onclick = function () {
            alert(this.innerHTML)
        }
    }

    //事件委派
    ele_btn.onclick = function () {
        //创建一个li标签
        var ele_li = document.createElement('li');
//        ele_li.innerHTML= 444;
        ele_li.innerText = Math.round(Math.random()*1000);
        ele_ul.appendChild(ele_li);//吧创建的li标签添加到ul标签
        ele_ul.addEventListener('click',function (e) {
            console.log(e.target); //当前点击的标签
            console.log(e.target.tagName);//拿到标签的名字  LI
            if (e.target.tagName=='LI'){
                console.log('ok');
//                alert(ele_li.innerHTML)
            }
        })
    }
</script>
</html>

 

posted @ 2019-12-28 22:18  ABDM  阅读(588)  评论(0编辑  收藏  举报