IE踩坑:innerHtml置空后,之前保存的其内部元素丢失

用js原生写日历的时候,为了兼容IE9+,踩了很多坑,其中一个就是innerHtml的问题。

简要描述:

  • 当时的需求:一个父元素中有很多子元素,我只需要其中的某一个元素,其他元素丢弃。

  • 想到的解决方案:先将子元素保存,然后将父元素innerHtml置为空,然后再将子元素加入。

  • 结果:在Chrome、Firfox中无问题,在IE中无效,IE中保存的子元素其innerHtml会丢失......(IE测试版本为9,10,11都无效)

测试代码1:

  • index.html部分
<div id="demo">
    <div id="test">12345</div>
</div>
  • test.js
var demo = document.getElementById("demo"),
    child = demo.firstElementChild;
console.log(child);  // 置空前
demo.innerHTML = "";
console.log(child);   // 置空后
demo.appendChild(child);
console.log(demo);

测试结果1:


Chrome结果
Firefox结果
IE结果,当前为IE11

测试代码2:

  • 该测试中test.js未变,改了一下html中的结构
<div id="demo">
    <div id="test">
        <div>
            dsfjdsoi
        </div>
    </div>
</div>

测试结果2:

Chrome结果
Firefox结果
IE结果,当前为IE11

结论:

  • 对比两次发现,有点诡异啊......Chrome、firfox完全满足预期,IE就有点不太懂了,测试1的时候在未置空前至少div中是还有值的,在测试2中就都没有值了...
  • 网上搜了很多都没发现解答,求大佬解惑.....
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   JavaScript 与 HTML 之间的交互是通过事件实现的。   事件,就是文档或浏览器窗口中发生的一些特...
    霜天晓阅读 8,861评论 1 11
  • 前端开发面试题 面试题目: 根据你的等级和职位的变化,入门级到专家级,广度和深度都会有所增加。 题目类型: 理论知...
    怡宝丶阅读 7,378评论 0 7
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 12,019评论 2 19
  • 转载 前端开发面试题 <a name='preface'>前言</a> 本文由我收集总结了一些前端面试题,初学者阅...
    小九喵喵阅读 3,304评论 0 0
  •   尽管 DOM 作为 API 已经非常完善了,但为了实现更过的功能,仍然会有一些标准或专有的扩展。   2008...
    霜天晓阅读 3,207评论 0 0