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 相关文章推荐
JavaScript中的apply()方法和call()方法使用介绍
Jul 25 Javascript
使用jQuery不判断浏览器高度解决iframe自适应高度问题
Dec 16 Javascript
JavaScript设置、获取、清除单值和多值cookie的方法
Nov 17 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(二)之数据支持json字符串、list集合
Aug 11 Javascript
jQuery实现的购物车物品数量加减功能代码
Nov 16 Javascript
JS生成和下载二维码的代码
Dec 07 Javascript
JavaScript实现简单评论功能
Aug 17 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
Apr 07 Javascript
VUE 3D轮播图封装实现方法
Jul 03 Javascript
Element Input组件分析小结
Oct 11 Javascript
如何通过JS实现日历简单算法
Oct 14 Javascript
vue3+typeScript穿梭框的实现示例
Dec 29 Vue.js
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使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
jQuery ReferenceError: $ is not defined 错误的处理办法
2013/05/10 Javascript
JS判断表单输入是否为空(示例代码)
2013/12/23 Javascript
jQuery实现返回顶部功能
2016/02/23 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
js-FCC算法-No repeats please字符串的全排列(详解)
2017/05/02 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
ionic4+angular7+cordova上传图片功能的实例代码
2019/06/19 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
JS数组属性去重并校验重复数据
2020/01/10 Javascript
vue开发移动端底部导航条功能
2020/04/08 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
js里面的变量范围分享
2020/07/18 Javascript
基于jQuery拖拽事件的封装
2020/11/29 jQuery
[03:16]DOTA2完美大师赛小组赛精彩集锦
2017/11/22 DOTA
Python使用面向对象方式创建线程实现12306售票系统
2015/12/24 Python
Python的Tornado框架实现图片上传及图片大小修改功能
2016/06/30 Python
详解Python 数据库 (sqlite3)应用
2016/12/07 Python
numpy返回array中元素的index方法
2018/06/27 Python
python3 小数位的四舍五入(用两种方法解决round 遇5不进)
2019/04/11 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
Python requests模块cookie实例解析
2020/04/14 Python
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
大学毕业生工作的自我评价
2013/10/01 职场文书
班长岗位职责
2013/11/10 职场文书
安全标准化汇报材料
2014/02/03 职场文书
信息管理与信息系统专业求职信
2014/06/21 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
研究生导师推荐信
2015/03/25 职场文书
2015年党风廉政建设工作总结
2015/04/09 职场文书
校运会班级霸气口号
2015/12/24 职场文书
《作风建设永远在路上》心得体会
2016/01/21 职场文书