万维网联盟(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; }