IE与FireFox中的childNodes区别


Posted in Javascript onOctober 20, 2011

Javascript中,相信大家都试过用getElementsByTagName和childNodes来实现对节点的遍历。但是 getElementsByTagName对复杂的DOM结构遍历明显不如用childNodes,因为childNodes能更好的处理DOM的层次结构,建议在需要进行了遍历时首先使用childNodes!!
但是不幸的是,在IE和FireFox中childNodes有点细微的差别:

<head> <script type="text/javascript"> 
function view(){ 
var childs1=$('FirstDiv').childNodes; 
var childs2=$('SecondDiv').childNodes; 
alert("length of FirstDiv: "+childs1.length+"--length of SecondDiv: "+childs2.length); 
} 
var $=function(id) 
{ return document.getElementById(id); } 
</script> 
</head> 
<html > 
<body onload="view();"> 
<!--第一个遍历对象,节点之间留有空格和回车--> 
<div id="FirstDiv"> 
<div>1</div> 
<div>2</div> 
<div>3</div> 
</div> 
<!--第二个遍历对象,除注释外,节点间无空格回车--> 
<div id="SecondDiv"><div>first</div><div>second</div><div>third</div></div> 
</html>

用IE和Firefox运行会有两个不同的结果:IE的结果是3:3;而Firefox则是7:3。怎么会有这种情况呢?
在结构上,对象1和对象2不同的是对象1的子节点间有回车或者空格,而对象2则是一行写到尾。大家都应该想到了吧,IE是将一个完整标签作为一个节点。而 Firefox除了上述的的情况外,也把一个标签的结束符“>”到下一个标签的起始符“<”之间的内容(除注释外,包括任何的文字、空格、回车、制表符)也算是一个节点了。而且这种节点也有它们自己独特的属性和值--nodeName="#text"。
在实际运用中,Firefox在遍历子节点时,在for循环里不妨加上:
if(childNode.nodeName=="#text") continue;
或者nodeType == 1。
这样,便跳过不需要的操作,使程序运行的更有效率。
附:
Node.ELEMENT_NODE == 1
Node.ATTRIBUTE_NODE == 2
Node.TEXT_NODE == 3
Node.CDATA_SECTION_NODE == 4
Node.ENTITY_REFERENCE_NODE == 5
Node.ENTITY_NODE == 6
Node.PROCESSING_INSTRUCTION_NODE == 7
Node.COMMENT_NODE == 8
Node.DOCUMENT_NODE == 9
Node.DOCUMENT_TYPE_NODE == 10
Node.DOCUMENT_FRAGMENT_NODE == 11
Node.NOTATION_NODE == 12

var node = document.documentElement.firstChild;
if(node.nodeType != Node.COMMENT_NODE)
alert("You should comment your code well!");

Javascript 相关文章推荐
jQuery Select(单选) 模拟插件 V1.3.62 改进版
Jul 17 Javascript
载入jQuery库的最佳方法详细说明及实现代码
Dec 28 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
Apr 18 Javascript
javascript教程:关于if简写语句优化的方法
May 17 Javascript
微信小程序支付功能 php后台对接完整代码分享
Jun 12 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
Jul 10 Javascript
Layer.js实现表格溢出内容省略号显示,悬停显示全部的方法
Sep 16 Javascript
js判断复选框是否选中的方法示例【基于jQuery】
Oct 10 jQuery
JavaScript实现打砖块游戏
Feb 25 Javascript
javascript 设计模式之享元模式原理与应用详解
Apr 08 Javascript
AJAX检测用户名是否存在的方法
Mar 24 Javascript
React-vscode使用jsx语法的问题及解决方法
Jun 21 Javascript
IE和Firefox的Javascript兼容性总结[推荐收藏]
Oct 19 #Javascript
基于jquery的$.ajax async使用
Oct 19 #Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
Oct 19 #Javascript
模拟select的代码
Oct 19 #Javascript
通过下拉框的值来确定输入框是否可以为空的代码
Oct 18 #Javascript
Notify - 基于jquery的消息通知插件
Oct 18 #Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
Oct 17 #Javascript
You might like
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
WordPress主题制作之模板文件的引入方法
2015/12/28 PHP
php采集神器cURL使用方法详解
2016/02/19 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
thinkphp实现分页显示功能
2016/12/03 PHP
php中关于换行的实例写法
2019/09/26 PHP
调试php程序的简单步骤
2019/10/04 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
jQuery中:empty选择器用法实例
2014/12/30 Javascript
使用jquery+CSS3实现仿windows10开始菜单的下拉导航菜单特效
2015/09/24 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
2015/12/04 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
实例详解JSON取值(key是中文或者数字)方式
2017/08/24 Javascript
微信小程序实现文字从右向左无限滚动
2020/11/18 Javascript
vue.js 2.*项目环境搭建、运行、打包发布的详细步骤
2019/05/01 Javascript
JavaScript制作3D旋转相册
2020/08/02 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
Python中属性和描述符的正确使用
2016/08/23 Python
谈谈如何手动释放Python的内存
2016/12/17 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
Python爬虫入门有哪些基础知识点
2020/06/02 Python
Python包资源下载路径报404解决方案
2020/11/05 Python
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
HTML5 与 XHTML2
2008/10/17 HTML / CSS
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
运动会通讯稿400字
2014/01/28 职场文书
《问银河》教学反思
2014/02/19 职场文书
中国入世承诺
2014/04/01 职场文书
班干部竞选演讲稿
2014/04/24 职场文书
观看《周恩来的四个昼夜》思想汇报
2014/09/12 职场文书
财务会计实训报告
2014/11/05 职场文书