DOM學(xué)習(xí)——Node類型

childNodes

1.節(jié)點(diǎn)獲取

獲取子節(jié)點(diǎn):某個(gè)節(jié)點(diǎn).childNodes[序號(hào)] / 某個(gè)節(jié)點(diǎn).childNodes.item(序號(hào));
序號(hào)從零開始
(* ̄(oo) ̄)注:節(jié)點(diǎn)包括文本節(jié)點(diǎn)和元素節(jié)點(diǎn)!!

eg: 

      <div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
            <span>
                aa
            </span>
        </div>
        <script>
            var ul1 = document.getElementById("aa");
            var firstNode = ul1.childNodes[0];
            var firstNode2 = ul1.childNodes.item(0);
            alert(firstNode.nodeName);
            alert(firstNode2.nodeName);
        </script>

節(jié)點(diǎn)的關(guān)系:nextSibling / previousSibling
如果一個(gè)父節(jié)點(diǎn)只有一個(gè)子節(jié)點(diǎn),那么,父節(jié)點(diǎn)的firstChild和lastChild都是這個(gè)子節(jié)點(diǎn),這個(gè)子節(jié)點(diǎn)的 nextSibling / previousSibling 的值都是null;

2.節(jié)點(diǎn)增刪改

增:前提是新建

appendChild(),添加到childNodes列表的最后面

eg:
        <div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
        </div>
        <script>
            var ul2 = document.getElementById("aa");
            var newChild = document.createElement("li");
            var txt = document.createTextNode("我是新的");
            newChild.appendChild(txt);
            ul2.appendChild(newChild);
        </script>
<!--這里是線創(chuàng)建一個(gè)li元素節(jié)點(diǎn),然后新建一個(gè)文本節(jié)點(diǎn),把文本節(jié)點(diǎn)添加到元素節(jié)點(diǎn)里面,
(在一個(gè)元素節(jié)點(diǎn)里面有文本節(jié)點(diǎn),那么該文本節(jié)點(diǎn)就是這個(gè)元素節(jié)點(diǎn)的子節(jié)點(diǎn)),
再把整個(gè)節(jié)點(diǎn)添加到ul的、childNodes列表的最后面-->

插入:insertBefore

在前面插入

eg:
<div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
        </div>
        <script>
            var ul2 = document.getElementById("aa");
            var newChild = document.createElement("li");
            var txt = document.createTextNode("我是插入的");
            newChild.appendChild(txt);
            
            var li2 = ul2.childNodes[1];
            ul2.insertBefore(newChild,li2);
        </script>

在后面插入
(* ̄(oo) ̄)DOM并沒有提供insertAfter方法。。。
要實(shí)現(xiàn)的就自己造一個(gè)

<div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li id="bb"><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
        </div>
<script>
var newChild = document.createElement("li");
            var txt = document.createTextNode("我是插入的");
            newChild.appendChild(txt);
            
            var target = document.getElementById("bb");
            function insetAfter(newChild,target){
                var parent = target.parentNode;
                if(target == parent.lastChild){
                    parent.appendChild(newChild);
                }
                else{
                    parent.insertBefore(newChild,target.nextSibling);
                }
                
            }
            insetAfter(newChild,target);
            
        </script>

替換:replaceChild()

<div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li id="bb"><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
        </div>
<script>
var ul2 = document.getElementById("aa");
            var newChild = document.createElement("li");
            var txt = document.createTextNode("我是替換的");
            newChild.appendChild(txt);
            
            var target = document.getElementById("bb");
            ul2.replaceChild(newChild,target);
            
        </script>

移除:removeChild()

//移除
<div>
           <ul id="aa">
               <li><a href="#">1</a></li>
               <li id="bb"><a href="#">2</a></li>
               <li><a href="#">3</a></li>
           </ul>
       </div>
<script>
           var ul2 = document.getElementById("aa");

           var target = document.getElementById("bb");
           ul2.removeChild(target);
       </script>
//因?yàn)閞eplaceChild、removeChild的節(jié)點(diǎn)都是包含文本節(jié)點(diǎn)的,所以在使用firstChild和lastChild的時(shí)候要注意,當(dāng)前節(jié)點(diǎn)是否為文本節(jié)點(diǎn)。

比如下面就會(huì)看起來沒有變化
<div>
           <ul id="aa">
               <li><a href="#">1</a></li>
               <li id="bb"><a href="#">2</a></li>
               <li><a href="#">3</a></li>
           </ul>
       </div>
<script>
           var ul2 = document.getElementById("aa");

           var target = document.getElementById("bb");
           ul2.removeChild(ul2.firstChild);
       </script>
上面這幾種方法都是在操作某個(gè)節(jié)點(diǎn)的子節(jié)點(diǎn),所以在使用這些方法之前必須獲取父節(jié)點(diǎn),并且,并不是所有節(jié)點(diǎn)都有子節(jié)點(diǎn),如果在不支持子節(jié)點(diǎn)的節(jié)點(diǎn)使用這些方法,就會(huì)導(dǎo)致錯(cuò)誤的發(fā)生。

·

克?。篶loneNode()

<div>
            <ul id="aa">
                <li><a href="#">1</a></li>
                <li id="bb"><a href="#">2</a></li>
                <li><a href="#">3</a></li>
            </ul>
        </div>
<script>
var ul2 = document.getElementById("aa");
            var newclone = ul2.cloneNode(true);
            var newclone2 = ul2.cloneNode(false);
            document.body.appendChild(newclone);
            document.body.appendChild(newclone2);
</script>
//參數(shù)true:復(fù)制節(jié)點(diǎn)以及整個(gè)子節(jié)點(diǎn)樹
//參數(shù)為false:只復(fù)制節(jié)點(diǎn),不會(huì)復(fù)制子節(jié)點(diǎn)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容