Dom操作之兼容技巧分享


Posted in Javascript onSeptember 20, 2011

例如:我们在获取ul下所有li元素的时候.或者是某个元素的下一个元素时.都有可能会碰到这讨厌的空格问题.当然在IE浏览器里这些空格会被自动过滤.而FF则没有那么勤劳.FF浏览器会把这些空格也看作为一个元素.如果你对Dom中的空格元素感到疑惑,请运行下面的代码.至少使用IE和FF两种浏览器测试.你会明白一切!

<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Dom</title> 
</head> 
<body> 
<h2>运行该代码以后.你会发现在IE里弹出3.在FF里弹出7.</h2> 
<ol id="list"> 
<li>html</li> 
<li>css</li> 
<li>dom</li> 
</ol> 
<script> 
var list = document.getElementById("list"); 
var list_child = list.childNodes; //获取ol中所有的子元素 
alert("ol中共有"+list_child.length+"个元素,分别是"); 
for(var i = 0; i<list_child.length; i++){ 
alert(list_child[i].tagName); 
} 
</script> 
</body> 
</html>

上面的代码演示了要获取ol元素中所有的子元素.并弹出ol内有几个子元素.我们可以看到ol中包含了3个li元素.在IE中弹出3这是正确的.那为什么到了FF和Chrome浏览器中会弹出7呢? 其实在你书写代码的时候.在元素与元素换行之间都会形成一个空格.(注意:不要以为回一次车就会形成一个空格.这是错误的,也就是说元素与元素之间的空白,你就是换几百次行.也算一个空格)FF和Chrome浏览器不会过滤这些空格元素.所以弹出7也是正确的.
下面我们用同样的html结构.来演示如何过滤删除这些空格元素.
<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Dom</title> 
</head> 
<body> 
<h2>运行该代码以后.你会发现在IE,FF,Chrome里返回的结果一样了.</h2> 
<ol id="list"> 
<li>html</li> 
<li>css</li> 
<li>dom</li> 
</ol> 
<script> 
function Del_space(elem){ //过滤空格的函数 
var elem_child = elem.childNodes; //获取所有子元素 
for(var i = 0;i<elem_child.length;i++){ 
//如果是文本节点,并且内容只包含空格则删除该节点 
if(elem_child[i].nodeName == "#text" && ! /\S/.test(elem_child[i].nodeValue)){ 
elem.removeChild(elem_child[i]);//如果该元素为空格则删除 
} 
} 
} 
Del_space(document.getElementById("list")); //删除ol中的所有空格 
var list = document.getElementById("list"); 
var list_child = list.childNodes; //获取ol中所有的子元素 
for(var i=0;i<list_child.length;i++){ 
alert(list_child[i].tagName); 
} 
</script> 
</body> 
</html>

推荐如下方法:
<!DOCTYPE HTML> 
<html> 
<head> 
<meta charset="utf-8"> 
<title>Dom</title> 
</head> 
<body> 
<h2>运行该代码以后.你会发现在IE,FF,Chrome里返回的结果一样了.</h2> 
<ol id="list"> 
<li>html</li> 
<li>css</li> 
<li>dom</li> 
</ol> 
<script> 
for(var x=0,list_li = document.getElementById('list').childNodes; x<list_li.length; x++){ 
if(list_li[x].nodeType == 1){ 
alert(list_li[x].tagName); 
} 
} 
</script> 
</body> 
</html>
Javascript 相关文章推荐
JS 统计时间
Mar 09 Javascript
jQuery.lazyload+masonry改良图片瀑布流代码
Jun 20 Javascript
通过伪协议解决父页面与iframe页面通信的问题
Apr 05 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
Jun 15 Javascript
javascript对象的创建和访问
Mar 08 Javascript
JavaScript函数节流概念与用法实例详解
Jun 20 Javascript
Node.js DES加密的简单实现
Jul 07 Javascript
JS简单实现表格排序功能示例
Dec 20 Javascript
AngularJS实现的锚点楼层跳转功能示例
Jan 02 Javascript
tangram.js库实现js类的方式实例分析
Jan 06 Javascript
JavaScript判断日期时间差的实例代码
Mar 01 Javascript
bootstrap中selectpicker下拉框使用方法实例
Mar 22 Javascript
js获取图片大小的函数代码
Sep 20 #Javascript
javascript中的注释使用与注意事项小结
Sep 20 #Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
Sep 20 #Javascript
JavaScript高级程序设计 学习笔记 js高级技巧
Sep 20 #Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
Sep 20 #Javascript
JQuyer $.post 与 $.ajax 访问WCF ajax service 时的问题需要注意的地方
Sep 20 #Javascript
简单的jquery拖拽排序效果实现代码
Sep 20 #Javascript
You might like
在PHP中利用XML技术构造远程服务(下)
2006/10/09 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
PHP使用SOAP调用.net的WebService数据
2013/11/12 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
JQuery扩展插件Validate—6 radio、checkbox、select的验证
2011/09/05 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
jquery组件使用中遇到的问题整理及解决
2014/02/21 Javascript
javascript的函数作用域
2014/11/12 Javascript
javascript框架设计之浏览器的嗅探和特征侦测
2015/06/23 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
Bootstrap插件全集
2016/07/18 Javascript
探讨AngularJs中ui.route的简单应用
2016/11/16 Javascript
jQuery使用siblings获取某元素所有同辈(兄弟姐妹)元素用法示例
2017/01/30 Javascript
JS动态生成年份和月份实例代码
2017/02/04 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
nodejs Assert中equal(),strictEqual(),deepEqual(),strictDeepEqual()比较
2017/09/18 NodeJs
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
在iFrame子页面里实现模态框的方法
2018/08/17 Javascript
jQuery实现基本隐藏与显示效果的方法详解
2018/09/05 jQuery
使用ng-packagr打包Angular的方法示例
2018/09/21 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
Python中基础的socket编程实战攻略
2016/06/01 Python
Python中在脚本中引用其他文件函数的实现方法
2016/06/23 Python
python实现比较文件内容异同
2018/06/22 Python
opencv 形态学变换(开运算,闭运算,梯度运算)
2020/07/07 Python
写给妈妈的道歉信
2014/01/11 职场文书
销售人员自我评价
2014/02/01 职场文书
事业单位分类改革实施方案
2014/03/21 职场文书
企业形象策划方案
2014/05/29 职场文书
工作简报怎么写
2015/07/21 职场文书
销售人员管理制度
2015/08/06 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
2019个人年度目标制定攻略!
2019/07/12 职场文书
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电