基于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 相关文章推荐
多个iframe自动调整大小的问题
Sep 18 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
May 19 Javascript
js replace替换所有匹配的字符串
Feb 13 Javascript
教你如何在 Javascript 文件里使用 .Net MVC Razor 语法
Jul 23 Javascript
JavaScript中计算网页中某个元素的位置
Jun 10 Javascript
基于JavaScript制作霓虹灯文字 代码 特效
Sep 01 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
Jan 08 Javascript
一个非常好用的文字滚动的案例,鼠标悬浮可暂停[两种方案任选]
Dec 01 Javascript
微信小程序如何获知用户运行小程序的场景教程
May 17 Javascript
vue-cli 为项目设置别名的方法
Oct 15 Javascript
vue实现评论列表功能
Oct 25 Javascript
使用Vant完成Dialog弹框案例
Nov 11 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
雄兵连三大错觉:凯莎没了,凉冰阵亡了,华烨觉得自己又行了
2020/04/09 国漫
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
第4章 数据处理-php数组的处理-郑阿奇
2011/07/04 PHP
php获取linux命令结果的实例
2017/03/13 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
javascript 写类方式之七
2009/07/05 Javascript
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
Javascript实现DIV滚动自动滚动到底部的代码
2012/03/01 Javascript
jQuery 1.8 Release版本发布了
2012/08/14 Javascript
jquery和javascript的区别(常用方法比较)
2013/07/04 Javascript
JavaScript利用HTML DOM进行文档操作的方法
2016/03/28 Javascript
把json格式的字符串转换成javascript对象或数组的方法总结
2016/11/03 Javascript
JS实现简单的二元方程计算器功能示例
2017/01/03 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
在vue组件中使用axios的方法
2018/03/16 Javascript
node全局变量__dirname与__filename的区别
2019/01/14 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
vue学习笔记之slot插槽基本用法实例分析
2020/02/01 Javascript
RxJS在TypeScript中的简单使用详解
2020/04/13 Javascript
Python实现的rsa加密算法详解
2018/01/24 Python
Windows下python3.6.4安装教程
2018/07/31 Python
python dataframe NaN处理方式
2019/12/26 Python
Python如何在DataFrame增加数值
2020/02/14 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
英文版餐饮运营管理求职信
2013/11/06 职场文书
大专生的学习自我评价
2013/12/04 职场文书
电信营业员自我评价分享
2014/01/17 职场文书
小学生安全责任书
2014/07/25 职场文书
庆国庆活动总结
2014/08/28 职场文书
培根随笔读书笔记
2015/07/01 职场文书