萬維網聯盟(W3C)定義HTML DOM 標准節點有以下幾種 ()
類型 值 說明
ELEMENT_NODE | 1 | 元素節點 | * |
ATTRIBUTE_NODE | 2 | 屬性節點 | * |
TEXT_NODE | 3 | 文本節點 | * |
CDATA_SECTION_NODE | 4 | CDATA 區段 | |
ENTITY_REFERENCE_NODE | 5 | 實體引用 | |
ENTITY_NODE | 6 | 實體 | |
PROCESSING_INSTRUCTION_NODE | 7 | 處理指令 | |
COMMENT_NODE | 8 | 注釋節點 | * |
DOCUMENT_NODE | 9 | 文檔節點 | * |
注: * 表示常用
IE與FF 對 以上節點的 "理解" 有差異,如比我們寫js : 對象.nextSibling , 來取得對象的下一個兄弟節點, 在IE中,只會取ELEMENT_NODE (元素節點), 忽略其它類型節點. FF會取得上面各種類型節點.
如:
- <table>
- <tr id="nst"><td></td></tr>(這里有換行,就是一個文本節點)
- <tr><td></td></tr>
- </table>
- --------------------------------------
- <js>
- var o=$('nst');
- var next=o.nextSibling;
- </js>
- ---------------------------------------
結果: IE中:next 是元素節點 (第二個<tr>) FF中:next 是文本節點 (那個換行)
解決辦法: 在base.js中有如下方法: 通過判斷 nodeType == 1 來解決問題
// 獲得下一個元素對象(nodeType=1) function $NE(e) { e = e.nextSibling; while (e && e.nodeType != 1){e = e.nextSibling;} return e; } // 獲得第一個元素對象(nodeType=1) function $FE(e) { e = e.firstChild; while (e && e.nodeType != 1){e = e.nextSibling;} return e; }