在 HTML DOM 中,所有事物都是节点。DOM 是被视为节点树的 HTML。

1.DOM 节点

根据 W3C 的 HTML DOM 标准,HTML 文档中的所有内容都是节点:

  • 整个文档是一个文档节点
  • 每个 HTML 元素是元素节点
  • HTML 元素内的文本是文本节点
  • 每个 HTML 属性是属性节点
  • 注释是注释节点

    2.节点的分类

  • 元素节点 nodeType==1

  • 文本节点 nodeType==3
  • 属性节点 nodeType==2 ```javascript getAttributeNode() 获取属性节点 firtChild获取第一个子节点

hello world

  1. <a name="138e0"></a>
  2. ### 2.1获取子节点
  3. childNodes--包含所有的子节点(不管文本还是元素都包含)<br />children --只会获取子节点
  4. ```javascript
  5. var app = document.getElementById("app");
  6. var childs = app.childNodes;
  7. var children = app.children;
  8. console.log(childs)
  9. console.log(children)

2.2获取所有元素的节点

  1. <ul id="app">
  2. <li>hello world</li>
  3. <li>hello world</li>
  4. <li>hello world</li>
  5. <li>hello world</li>
  6. </ul>
  7. <script>
  8. var app = document.getElementById("app");
  9. var childs = app.childNodes;
  10. var arr = [];
  11. for(var i=0;i<childs.length;i++){
  12. if(childs[i].nodeType == 1){
  13. arr.push(childs[i])
  14. }
  15. }
  16. console.log(arr);
  17. </script>

3.增加节点

  1. createElement(); //创建元素节点
  2. createTextNode(); //创建文本节点
  3. appendChild(); //向节点的子节点列表的末尾添加新的子节点
  1. <div id="app">
  2. <div>
  3. hello world</div>
  4. </div>
  5. </div>
  6. <script>
  7. var app = document.getElementById("app");
  8. var p = document.createElement("p");
  9. var txt = document.createTextNode("hello world");
  10. p.appendChild(txt);
  11. app.appendChild(p);
  12. </script>

3.1给元素添加内容innerHTML

  1. parentNode.insertBefore(newNode,targetNode)
  2. parentNode.insertBefore(新添加节点,参照节点)_注意:parentNode是节点的父节点
  1. <ul id="app">
  2. <li>html</li>
  3. <li id="js">js</li>
  4. </ul>
  5. <script>
  6. var app=document.getElementById("app");
  7. var js=document.getElementById("js");
  8. var li=document.createElement("li");
  9. li.innerHTML="vue";
  10. app.insertBefore(li,js);//在js上面插入
  11. </script>

3.2.append和prepend

append()用于在被选元素的结尾插入元素。
prepend()用于在被选元素的开头插入元素。

  1. <ul id="app">
  2. <li>html</li>
  3. </ul>
  4. <script>
  5. // append,prepend
  6. var app = document.getElementById("app");
  7. var p = "<h1>hello world<h1>";
  8. //app.append(p);
  9. app.prepend(p);
  10. </script>

4.删除节点

  1. parentNode.removeChild(childNode)
  1. <div id="app">
  2. <div id="child">child</div>
  3. </div>
  4. <script>
  5. // removeChild()让从元素DOM树,渲染树上都消失
  6. var app = document.getElementById("app");
  7. var child = document.getElementById("child");
  8. app.removeChild(child);
  9. </script>

5.替换节点

  1. repalceChild(newNode,targetNode)
  1. <div id="app">
  2. <div id="child">child</div>
  3. </div>
  4. <script>
  5. var app=document.getElementById("app");
  6. var chlid=document.getElementById("child");
  7. var p=document.createElement("p");
  8. p.innerHTML="hello";
  9. app.replaceChild(p,chlid);

6.克隆节点

  1. node.cloneNode(true)
  1. <div id="app">
  2. <div class="one">hello</div>
  3. </div>
  4. <script>
  5. var app=document.getElementById("app");
  6. var one=document.getElementsByClassName("one");
  7. var test = one.cloneNode(true);
  8. console.log(test);
  9. app.appendChild(test);
  10. </script>