浅谈 IE下innerHTML导致的问题
先来看个demo吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <! DOCTYPE html> < html > < head > < meta charset=" utf-8"> < meta name="author" content="http://www.softwhy.com/" /> < title >蚂蚁部落</ title > < script type="text/javascript"> window.onload = function() { var obox = document.getElementById("box"); var lis = obox.getElementsByTagName("li"); var obt = document.getElementById("bt"); var theArray = []; for (var index = 0; index < lis.length ; index++) { theArray.push(lis[index]); } function randomSort(a, b) { return Math.random() > 0.5 ? -1 : 1; } obt.onclick = function() { obox.innerHTML = ""; var newArray = theArray.sort(randomSort); for (var i = 0; i < newArray.length ; i++) { obox.appendChild(newArray[i]); } } } </script> </ head > < body > < ul id="box"> < li >蚂蚁部落一</ li > < li >蚂蚁部落二</ li > < li >蚂蚁部落三</ li > < li >蚂蚁部落四</ li > < li >蚂蚁部落五</ li > </ ul > < input type="button" id="bt" value="查看效果" /> </ body > </ html > |
可以在IE下测试效果,推荐IE10,IE11浏览本页。
测试区
-
- 蚂蚁部落一
- 蚂蚁部落二
- 蚂蚁部落三
- 蚂蚁部落四
- 蚂蚁部落五
chrome,firefox,safari 下没问题,可是IE所有版本下运行都不行。
这个是一哥们 落叶 在写demo的时候发现的,他说这个在IE下有问题,我测试了下,确实就IE这个老变态不行。
于是我监视了下 theArray 这个数组,发现当 obox.innerHTML = ""; 执行后,
IE 下 theArray 数组的 li 的内容被清空了,但是 li 节点还在。
在chrome下不受影响。
这个问题就纠结了,我也不知道为什么,谷歌找了半个小时也没找到,或者我找的关键词不对。
我只能给个简单的解决方法,就是克隆一份 li,并且在 appendChild 的时候,也克隆一份副本进去,这样才能确保正确。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | <! DOCTYPE html> < html > < head > < meta charset=" utf-8"> < meta name="author" content="http://www.softwhy.com/" /> < title >蚂蚁部落</ title > < script type="text/javascript"> window.onload = function() { var obox = document.getElementById("box"); var lis = obox.cloneNode(true).getElementsByTagName("li"); var obt = document.getElementById("bt"); var theArray = []; for (var index = 0; index < lis.length ; index++) { theArray.push(lis[index]); } function rnd(a, b) { return Math.random() > 0.5 ? -1 : 1; } obt.onclick = function() { obox.innerHTML = ""; var newArray = theArray.sort(rnd); for (var i=0,l=newArray.length; i& l t;l; i++) { obox.appendChild(newArray[i].cloneNode(true)); } } } </script> </ head > < body > < ul id="box"> < li >蚂蚁部落一</ li > < li >蚂蚁部落二</ li > < li >蚂蚁部落三</ li > < li >蚂蚁部落四</ li > < li >蚂蚁部落五</ li > </ ul > < input type="button" id="bt" value="查看效果" /> </ body > </ html > |
测试区
-
- 蚂蚁部落一
- 蚂蚁部落二
- 蚂蚁部落三
- 蚂蚁部落四
- 蚂蚁部落五
好了,今天算是水了一篇,如果有大神知道怎么回事的,还望指点一二,小生在此先谢过了。
分类:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述