寫在前面:在做insertbefore插入節點練習時發現乙個問題,插入childnodes[0]和childnodes[1]時插入的位置是一樣的!於是有了childnodes的了解,有了這篇文章,歡迎交流,歡迎拍磚。
本文包括如下:
1、dom 常用節點型別說明
2、childnodes.length詳解
3、節點中取值問題
4、childnodes相容性處理
說明:本文綜合網上其它博文對於childnodes的詳解。
nodetype
nodename
1element_node
元素節點
2attribute_node
屬性節點
3text_node
文字節點
4comment_node
注釋節點
5document_node
文件節點
對於元素節點、屬性節點、文字節點的理解請戳這裡
我們都知道js操作document時,使用childnodes取得節點的子節點個數時,在ie6、7、8下時完全沒有問題的,但是在其它瀏覽器下使用childnodes獲取節點,它會將空格符、回車符、換行符也看做乙個文字節點,使得節點長度不是我們想要的,我們看一下如下示例:
**部分:
<獲取到的childnodes長度及其nodename如下圖所示,通過下圖我們可以了解到換行符被看成文字節點,如果是在ie6,7,8中則為(2、p、p);div
id="div1"
>
<
p id
="fg"
>1
p>
<
p>2
p>
div>
jsvar c=document.getelementbyid("div1");
alert(c.childnodes.length);
alert(c.childnodes[0].nodename);
alert(c.childnodes[1].nodename);
alert(c.childnodes[2].nodename);
alert(c.childnodes[3].nodename);
alert(c.childnodes[4].nodename);
alert(c.childnodes[5].nodename);
如果我們把html**改成如下,則結果為:
所以就如我們前面所說在瀏覽器中childnodes連乙個回車符都不放過!
<我們把上個小節中**nodename換成nodevalue,看一下結果如圖div
id="div1"
>
<
p id
="fg"
>1
p>
<
p>2
p>
div>
不科學啊!為什麼的nodevalue值會為空!
原因在於,元素節點 ,擁有乙個值為 "1" 的文字節點。1並不是元素節點p的值
那麼我們若想取到中的數字1怎麼辦,我們需要獲得的是的childnodes的nodevalue值
var divnodes=document.getelementbyid("div1").getelementsbytagname("p");我們可以通過判斷div子節點的個數是否等於子節點元素節點的個數,若等於,繼續操作,若不等於,可通過新建乙個陣列,找出div子節點的元素節點填入陣列,然後對陣列進行操作,我們以insertbefore()插入節點為例,**如下:alert(divnodes[0].childnodes[0].nodevalue);
或者var pp=document.getelementbyid("fg");
alert(fg.childnodes[0].nodevalue);
>插入節點
button
>
<
script
>
function
test()
}c.insertbefore(a,rows[
0]);
}else
}script
>
body
>
html
>
這樣插入時childnodes[0]和childnodes[1]插入的位置就不一樣啦。
js 陣列去重方法兼思想詳解
陣列去重方法繁多,今日專案中偶有小用,決定參略一二,以備他用 var list 老王 老王 老王 老李 老王 老王 老李 老王 小三 小三 老王 我們的目標就是將上面的陣列去重 想法 陣列去重的本質就是對比然後作用於相同元素或者不同元素,從而達到自己的目的 方法列舉 1.不構建新陣列 functio...
select詳解及其限制
前言 筆者前幾天參加面試,被問到select 函式的限制,然後感覺一頭霧水,回來之後趕緊查詢了資料彌補知識短板,也意識到以後使用一些系統呼叫應該多想些為什麼,結合現實去思考實際中會遇到的問題。下面是對selecth 函式的一些總結 select是網路 io模型中的 io復用 在之前筆者還以為 sel...
NAT型別 及其 檢測 詳解
p2p的nat研究 第一部分 nat介紹 第二部分 nat型別檢測 第一部分 nat介紹 各種不同型別的nat according to rfc full cone nat 內網主機建立乙個udp socket localip localport 第一次使用這個socket給外部主機傳送資料時nat...