基于IE下ul li 互相嵌套时的bug,排查,解决过程以及心得介绍


Posted in Javascript onMay 07, 2013

检查bug的步骤

1. bug定位

在js脚本中,按照脚本执行的顺序,你可以用console或alert,来确定bug发生的代码区间,然后在区间内进一步来查找bug发生的具体代码段。

2. bug fix

通过排除,就是在插入节点内容的时候导致了bug,我用的是kissy的DOM.html()方法,其功能类似于DOM元素节点innerHTML方法,我起初认为是这个方法导致的IE6\7渲染出错,然后我换成了innerHTML方法,结果还是有误。

这时候我想到了内存泄露,看看是不是在循环拼接字符串的过程中,有循环引用或者其他原因造成内存泄露,然后在一些方法结束的时候,我把一些变量赋值null,来防止内存泄露(虽然不知道是否有效,但是至少我这么尝试过了),结果还是不行。

是不是数据过多,导致一下子渲染的时候崩溃呢?于是我减少了拼接的数据长度,这个起效了。1~3条数据的时候,可以渲染上,那就说明方法是没有错的;但是3条以上的数据,IE6\7还是无法响应。于是我又试着一条一条数据取持续插入,因为一次插入1条数据没有问题的话,我大不了多插入几次吧,但是IE还是有问题。其实,这时候我的思路已经偏离了。

后来找同事来看看,说之前也碰到过这个问题,是IE6\7下,标签没有正确闭合的原因导致的。没错,这就是这个bug的真正原因啦。后来,我把拼接的字符串打印出来,然后再使用格式化工具进行格式化,变很快发现了我拼接字符串的时候出现的这个问题,于是很快fix掉这个bug。我用的在线格式化工具:http://tool.chinaz.com/Tools/JsFormat.aspx

3. 测试

测试时候,我们写上一串html代码,并对一些标签不闭合,看看IE和chrome对比情况。

代码如下,在第二个li标签里,我们对ul标签中的其中一个<span>标签,做不闭合处理

<ul>
 <li>
  <ul>
   <li>inner li</li>
   <li>inner li</li>
   <li>inner li</li>
  </ul>
 </li>
 <li>
  <ul>
   <li>inner li</li>
   <li>inner li</li>
   <li>inner li
   <span>not closed<span>error happend</span></li>
  </ul>
 </li>
 <li>
  <ul>
   <li>inner li</li>
   <li>inner li</li>
   <li>inner li</li>
  </ul>
 </li>
</ul>

IE 和chrome下都正常显示,如上图。

接下来通过开发工具调试看看。

在IE7~9下面,dom结构错乱,发送错误的地方就在那个没有闭合的<span>标签那里,原来的第三个<li>节点的内容直接插到了<span>节点下面。

我们再来看看chrome下面的情况吧:第三个li正常的渲染到dom树里面,在发生错误的span标签那里,自动补上了一个span的闭合标签

4. 总结

各个浏览器在渲染html的时候表现不一样,尤其是IE浏览器同其他的浏览器。chrome和FF的容错性能很好,即使页面中存在html标签没有正常闭合,它也会智能的进行识别,并使其在浏览器中看上去无恙,且最终的DOM结构也没有问题,然而不好的一面就是你不知道你的代码有错,还以为一切正常。而IE8\9现在也可以这样处理,看上去页面内容没有问题,但是呢,通过开发工具,你可以看到错误的html代码没有正常的DOM结构。但是IE6\7就不会给你这样的机会,要么就直接崩溃了。

chrome可以容许我们犯错,而IE却对我们更加严格,虽然IE让我们很头疼,但是却对我们的代码提出了更高的要求!忽然觉得,有IE也蛮好的。。。

如果有一天,你发现IE下dom结构都无法渲染出来的时候,记得提醒自己,是否代码中有标签没有闭合。

Javascript 相关文章推荐
关于图片验证码设计的思考
Jan 29 Javascript
ASP.NET jQuery 实例15 通过控件CustomValidator验证CheckBoxList
Feb 03 Javascript
Javascript 浮点运算的问题分析与解决方法
Aug 27 Javascript
jQuery控制iFrame(实例代码)
Nov 19 Javascript
js实现ArrayList功能附实例代码
Oct 29 Javascript
BootStrap智能表单实战系列(七)验证的支持
Jun 13 Javascript
浅谈js继承的实现及公有、私有、静态方法的书写
Oct 28 Javascript
纯js实现悬浮按钮组件
Dec 17 Javascript
vue.js2.0 实现better-scroll的滚动效果实例详解
Aug 13 Javascript
Javascript数组方法reduce的妙用之处分享
Jun 10 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
Nov 01 Javascript
详解JavaScript中的Object.is()与&quot;===&quot;运算符总结
Jun 17 Javascript
解决javascript:window.close()在chrome,Firefox下失效的问题
May 07 #Javascript
jQuery的slideToggle方法实例
May 07 #Javascript
jQuery实现动画效果的实例代码
May 07 #Javascript
nullJavascript中创建对象的五种方法实例
May 07 #Javascript
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
May 07 #Javascript
javascript中的startWith和endWith的几种实现方法
May 07 #Javascript
js 获取和设置css3 属性值的实现方法
May 06 #Javascript
You might like
php 抽象类的简单应用
2011/09/06 PHP
PHP判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
PHP递归遍历指定文件夹内的文件实现方法
2016/11/15 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
js实现的黑背景灰色二级导航菜单效果代码
2015/08/24 Javascript
JavaScript数组去重的五种方法
2015/11/05 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
jquery easyui validatebox remote的使用详解
2016/11/09 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
vue-cli 引入、配置axios的方法
2018/05/08 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
[03:04]2018年国际邀请赛典藏宝瓶&莱恩声望物品展示 片尾有彩蛋
2018/06/04 DOTA
浅谈python中的正则表达式(re模块)
2017/10/17 Python
Python实现k-means算法
2018/02/23 Python
matplotlib 输出保存指定尺寸的图片方法
2018/05/24 Python
Python Tkinter模块实现时钟功能应用示例
2018/07/23 Python
python用quad、dblquad实现一维二维积分的实例详解
2019/11/20 Python
python计算无向图节点度的实例代码
2019/11/22 Python
TensorFlow固化模型的实现操作
2020/05/26 Python
网页中的电话号码如何实现一键直呼效果_附示例
2016/03/15 HTML / CSS
app内嵌H5 webview 本地缓存问题的解决
2020/10/19 HTML / CSS
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
Ted Baker英国官网:男士和女士服装及配件
2017/03/13 全球购物
怎么可以提高数据库查询数据的速度
2014/06/28 面试题
愚人节活动策划方案
2014/03/11 职场文书
工作总结与自我评价
2014/09/18 职场文书
乡镇党员干部四风对照检查材料思想汇报
2014/09/27 职场文书
JavaScript 反射学习技巧
2021/10/16 Javascript