js操作document时,试图使用childNodes取得Div节点的Div子节点,IE浏览器中没有任何问题,
而FF浏览器会将TEXT_NODE类型的节点同样计入子节点,这样就会操作到错误的对象。
解决方法一般有两种,
一种是使用node的nodeType属性判断结点的类型,然后进行操作。
这种方法意味着,使用var childnodelist=document.getElementById("mydiv").childNodes;得到的 childnodelist在两个浏览器下并不是相同的list,而这种方法是通过nodeType对该列表进行了筛选,过滤出ELEMENT_NODE 类型的节点,然后进行操作。
另一种方法,则是不使用childNodes来实现该功能,可以使用var childnodelist=document.getElementById("mydiv").getElementsByTagName("div"); 这种方法,直接会取得Div下的div类型的标签。在两种浏览器下,这种方法得到的list是相同的。
比较:使用第一种方法,借助了nodeType属性来完成该操作,表现在js代码上是if...else...筛选目标,第二种方法借助标签得到了该子节点,表现在js代码上,会有childnodelist[i*n+j]取得子节点。
节点类型 – 指定常量
| NodeType | Named Constant |
| 1 | ELEMENT_NODE |
| 2 | ATTRIBUTE_NODE |
| 3 | TEXT_NODE |
| 4 | CDATA_SECTION_NODE |
| 5 | ENTITY_REFERENCE_NODE |
| 6 | ENTITY_NODE |
| 7 | PROCESSING_INSTRUCTION_NODE |
| 8 | COMMENT_NODE |
| 9 | DOCUMENT_NODE |
| 10 | DOCUMENT_TYPE_NODE |
| 11 | DOCUMENT_FRAGMENT_NODE |
| 12 | NOTATION_NODE |
ff下不支持 getElementById("xx").MMM的属性取值,因此要用getAttribute来替代。
=========================================
可以在循环中添加if(obj.nodeType==3){continue;}else{do something...}来兼容
浙公网安备 33010602011771号