1、获取节点

1-1 nodeType 节点类型

  • nodeType == 1 元素节点
  • nodeType == 2 属性节点
  • nodeType == 3 文本节点

    getAttributeNode() 获取属性节点

    ```javascript // getAttributeNode() 获取属性节点 // firstChild() 获取第一个子节点

    hello world

  1. <a name="dKSW1"></a>
  2. ## 1-2 childNodes 获取所有子节点
  3. ```javascript
  4. <ul id="app">
  5. <li>hello world</li>
  6. <li>hello world</li>
  7. <li>hello world</li>
  8. <li>hello world</li>
  9. </ul>
  10. <script>
  11. var app = document.getElementById("app")
  12. var childs = app.childNodes;
  13. console.log(childs); // 所有的子节点 共有9个
  14. var arr = []
  15. for(var i = 0;i<childs.length;i++){
  16. if(childs[i].nodeType == 1){
  17. arr.push(childs[i])
  18. }
  19. }
  20. console.log(arr);
  21. </script>

1-3 children 只获取子元素节点

<ul id="app">
        <li>hello world</li>
        <li>hello world</li>
        <li>hello world</li>
        <li>hello world</li>
</ul>
    <script>
        var app = document.getElementById("app")
        console.log(app.children)  // 只获取子元素节点
    </script>

1-4 节点和元素节点

firstChild()  获取第一个子节点
lastChild()  获取最后一个子节点

childNodes  获取所有子节点
children  获取所有子元素节点
parentNode  获取父节点



firstChild         获取第一个子节点
firstElementChild  获取第一个元素子节点
lastChild
lastElementChild 

nextSibling    前一个节点
nextElementSibling  前一个元素节点
previousSibling
previousElementSibling
<ul id="app">
        <li>html</li>
        <li>css</li>
</ul>

    <script>
        var app = document.getElementById("app")
        console.log(app.firstElementChild);
    </script>

2、增加节点

2-1 appendChild 追加节点(末尾添加节点)

向节点的子节点列表的末尾添加新的子节点

createElement() 创建元素节点
createTextNode() 创建文本节点
createAttribute()创建属性节点
<div id="app">
</div>
    <script>
        var app = document.getElementById("app")
        var p = document.createElement("p")
        var txt = document.createTextNode("hello world")
        p.appendChild(txt)
        console.log(p)
        app.appendChild(p)
        console.log(app)
    </script>

2-2 insertBefore 插入节点

parentNode.insertBefore(newNode,在谁前面)
在已有的子节点前插入一个新的子节点
innerHTML 元素里的文字

<ul id="app">
        <li>html</li>
        <li id="js">javascript</li>
</ul>
    <!-- 
        innerHtml 元素里的文字
        parentNode.insertBefore(newNode,在谁前面) 插入节点
     -->
    <script>
        var app = document.getElementById("app")
        var li = document.createElement("li")
        var js = document.getElementById("js")
        li.innerHTML = "vue"
        console.log(li);
        app.insertBefore(li,js)
        console.log(app)
    </script>

2-3 append 在结尾插入节点

2-4 prepend 在开头插入节点

<ul id="app">
        <li>html</li>
</ul>
    <script>
        // append,prepend
        var app =  document.getElementById("app");
        var p1 = "<h1>我是在结尾插入的</h1>";
        var p2 = "<h1>我是在开头插入的</h1>"
        app.append(p1);
        app.prepend(p2)
    </script>

2-5 before

2-6 after

<p id="p">hello world</p>
    <script>
        var p =  document.getElementById("p");
        p.after("after")
        p.before("before")
    </script>

3、删除节点

3-1 removeChild() 删除节点

<div id="app">
  <div id="child">
    hello world
  </div>
</div>

    <script>
        // removeChild() 让元素从DOM树,渲染树中消失
        var app = document.getElementById("app")
        var child = document.getElementById("child")
        app.removeChild(child)
    </script>

4、替换节点

4-1 replaceChild 替换节点

parentNode.replaceChild(newNode,targetNode) 替换某个元素

<div id="app">
  <div id="child">
    child
    </div>
</div>

    <script>
        var app = document.getElementById("app")
        var child = document.getElementById("child")
        var p = document.createElement("p")
        p.innerHTML = "hello world"
        app.replaceChild(p,child)
        console.log(app);
    </script>

5、克隆节点

5-1 cloneNode 克隆节点

node.cloneNode( )  
括号为空或false浅拷贝,只复制标签不复制内容
括号为true,深拷贝,也复制内容
<div id="app">
    <div id="one">hello world</div>
</div>
    <script>
        var app = document.getElementById("app")
        var one = document.getElementById("one")
        var test = one.cloneNode(true)
        console.log(test);
        app.appendChild(test);
        console.log(app);
    </script>