首页 > 技术文章 > DOM之节点操作

zysfx 2020-04-26 16:37 原文

利用节点层级关系获取元素

1.父节点操作

node.parentNode;  //获取父节点,获取到的是离元素最近的一个父节点。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <title>Document</title>
 7 </head>
 8 <body>
 9     <div class="box">
10         <div class="head">
11             <h3>hello</h3>
12         </div>
13         
14     </div>
15 
16     <script>
17         var h  = document.querySelector("h3");
18         //node.parentNode;  获取父节点,获取到的是离元素最近的一个父节点。
19         //就是 class = head 的div 标签
20         console.log(h.parentNode)
21     </script>
22 </body>
23 </html>

 

 

2.子节点操作

node.childNodes;   //获取父节点的所有子节点,包括元素子节点,文本子节点(文本,换行,空格),几乎不用

node.children;  //获取父节点中的所有元素子节点

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <title>Document</title>
 7 </head>
 8 <body>
 9     <ul>
10         <li>aaaaaa</li>
11         <li>bbbbb</li>
12         <li>ccccccccc</li>
13         <li>ddddddddd</li>
14         <li>eeeeeeeee</li>
15         <li>fffffffff</li>
16         <li>ggggggggg</li>
17         <li>hhhhhhhhhh</li>
18     </ul>
19 
20     <script>
21         //node.children   获取父节点中的所有元素子节点
22         var ul  = document.querySelector("ul");
23         var lis = ul.children;
24         console.log(lis);
25         
26         
27     </script>
28 </body>
29 </html>

 

 

 

 3.兄弟节点

node.nextElementSibling;   //返回下一个元素兄弟节点

node.previousElementSibling;   // 返回前一个元素兄弟节点

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <title>Document</title>
 7 </head>
 8 <body>
 9     <ul>
10         <li>aaa</li>
11         <li>bbb</li>
12         <li>ccc</li>
13     </ul>
14 
15     <script>
16         var ul = document.querySelector("ul");
17         li = ul.children[1];
18         console.log(li);
19         console.log("==========================");
20 
21         //node.nextElementSibling;   返回下一个元素兄弟节点
22         console.log(li.nextElementSibling);
23         console.log("===========================");
24 
25         //node.previousElementSibling;  返回前一个元素兄弟节点
26         console.log(li.previousElementSibling);
27         
28         
29 
30         
31         
32     </script>
33 </body>
34 </html>

 

 

 

 

4.动态创建节点

(1)

document.createElement(" tagname");

创建由tagname指定的HTML元素

(2)

只是创建节点还是不够的,还要将创建的节点放到指定位置

 parentNode.append(child);

//child 就是你创建的这个节点,将这个节点放到指定的父节点的子节点列表的末尾

 

parentNode.insertBefore(child,指定元素)

//将你创建的节点放到父节点的指定子节点之前。

 

(3)删除节点

parentNode.removeChild(child);

 

代码示例:留言板

  1 <!DOCTYPE html>
  2 <html lang="en">
  3 
  4 <head>
  5     <meta charset="UTF-8">
  6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7     <title>Document</title>
  8     <style>
  9         ul li {
 10 
 11             margin: 25px 0;
 12             width: 600px;
 13             background-color: cadetblue;
 14             height: 40px;
 15             line-height: 40px;
 16             font-size: 19px;
 17             list-style: none;
 18         }
 19 
 20         li a {
 21             display: block;
 22             float: right;
 23             color: red;
 24             margin-right: 10px;
 25             text-decoration: none;
 26         }
 27     </style>
 28 </head>
 29 
 30 <body>
 31     <!-- 核心思路,当点击按钮后 就动态生成一个li 然后将li放入到ul中 -->
 32 
 33 
 34     <textarea name="" id="text01" cols="30" rows="10"></textarea>
 35     <button id="b1">优先发布</button>
 36     <button id="b2">顺序发布</button>
 37     
 38 
 39 
 40     <ul>
 41         <li>hahahhahha</li>
 42     </ul>
 43 
 44     <script>
 45         var btn01 = document.querySelector('#b1');
 46         var btn02 = document.querySelector('#b2');
 47         var ta = document.getElementById('text01');
 48         var ul_obj = document.querySelector('ul');
 49 
 50 
 51 
 52         //优先发布
 53         btn01.onclick = function () {
 54             if (ta.value == '') {
 55                 alert('没有输入内容!!');
 56             } else {
 57                 //创建一个li节点
 58                 var newli = document.createElement('li');
 59                 //然后向li节点中 添加内容(就是文本域中输入的内容) ,并且添加一个 a标签,为了后来
 60                 //删除这个li 标签
 61                 newli.innerHTML = ta.value + '<a href="javscript:;">删除</a>';
 62                 ul_obj.insertBefore(newli, ul_obj.children[0]);
 63 
 64 
 65                 //    删除元素,点击a标签,删除的是它的父节点li
 66 
 67                 var as = document.querySelectorAll('a');
 68                 for(var i=0;i<as.length;i++){
 69                      as[i].onclick=function(){
 70                          //node.removeChild(child) 删除的是li 
 71                          //a的父标签就是li 
 72 
 73                          ul_obj.removeChild(this.parentNode);
 74                      }
 75                 }
 76             }
 77         }
 78 
 79 
 80         btn02.onclick = function () {
 81             if (ta.value == '') {
 82                 alert('没有输入内容!!');
 83             } else {
 84                 var newli = document.createElement('li');
 85                 newli.innerHTML = ta.value + '<a href="javscript:;">删除</a>';
 86                 ul_obj.appendChild(newli);
 87 
 88 
 89                 var as = document.querySelectorAll('a');
 90                 for(var i=0;i<as.length;i++){
 91                      as[i].onclick=function(){
 92                          //node.removeChild(child) 删除的是li 当前a所在的li
 93 
 94                          ul_obj.removeChild(this.parentNode);
 95                      }
 96                 }
 97             }
 98         }
 99     </script>
100 </body>
101 
102 </html>

 

 

 (4)克隆节点

node.cloneNode();

//()中为空,表示只复制这个标签,而不复制这个标签中的内容,叫做浅拷贝

()中为true,为深拷贝,也复制内容

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <title>Document</title>
 7     <style>
 8         li{
 9             background-color: teal;
10         }
11     </style>
12 </head>
13 <body>
14     <ul>
15         <li>aaaaaaaa</li>
16     </ul>
17     <script>
18         var ul = document.querySelector("ul");
19         var li = document.querySelector("ul").children[0];
20 
21         //浅拷贝
22         var li01 = li.cloneNode();
23         console.log(li01);
24         ul.append(li01);
25 
26         //深拷贝
27         var li02 = li.cloneNode(true);
28         console.log(li02);
29         ul.insertBefore(li02,li);
30         
31         
32     </script>
33 </body>
34 </html>

 

推荐阅读