Javascript IE11未存储<;选项>;innerHTML

Javascript IE11未存储<;选项>;innerHTML,javascript,innerhtml,internet-explorer-11,Javascript,Innerhtml,Internet Explorer 11,从我正在进行的工作中得到的意大利面真的没有任何进展 我有一个用于jQuery的级联下拉插件,它为子对象中的每个可过滤对象创建一个数组,当父对象被更改时,子对象被清除,然后重新添加每个匹配项。在任何地方都没有任何问题。。。直到IE11,它不会保存innerHTML。子项确实会正确过滤,因为每个项的值都会保留,但文本不会保留,因此: 同样,您可能会注意到,寻呼机显示有4个项目,但没有显示任何内容。该数据通过AJAX调用加载,并构造一个HTML字符串,然后用jQuery.HTML()插入。我已经输入了

从我正在进行的工作中得到的意大利面真的没有任何进展

我有一个用于jQuery的级联下拉插件,它为子对象中的每个可过滤对象创建一个数组,当父对象被更改时,子对象被清除,然后重新添加每个匹配项。在任何地方都没有任何问题。。。直到IE11,它不会保存innerHTML。子项确实会正确过滤,因为每个项的值都会保留,但文本不会保留,因此:

同样,您可能会注意到,寻呼机显示有4个项目,但没有显示任何内容。该数据通过AJAX调用加载,并构造一个HTML字符串,然后用jQuery.HTML()插入。我已经输入了调试代码,以验证IE11实际上正确地构造了字符串,但是,只有元素实际被注入DOM。这可以在这里看到:[1]

控制台中选定的行是在插入DOM之前通过console.log()打印的构造HTML字符串。在我的椅子上,我觉得IE11只是错误地实现了HTML控制函数。当使用HTML字符串或限定对象时,完全相同的行为很明显

这是一个破坏系统的问题。由于这个原因,我们的CRM在IE11中无法使用,而这是IE6甚至没有遇到问题的功能。Firefox和Chrome的工作与预期一致

此后,我修改了插件,在操作时只使用vanilla JS,但行为保持不变。下面的[2]是一个屏幕截图,它表明IE11实际上是正确过滤的,只是在创建初始
级联
对象时没有存储该对象的innerHTML,因为这样就不允许我发布所有需要的链接

下面的评论中也包含了现场演示


有人见过这个吗?有什么想法吗?

想出来了。在IE中,.innerHTML是一个引用调用;在其他浏览器中,它返回一个固定值。

我遇到了类似的问题,如timeshifter08所述。我做了一个基本的场景,在这个场景中,这个意外的结果很容易重现

如前所述,IE11将清空/清除innerHTML属性设置为“”的元素的子节点。预先删除元素的子元素(ren)是一种可能的解决方法,适用于您可能仍然希望这样做的情况

这把小提琴在Chrome和Firefox中产生了不同的结果,与IE11不同


跨度

p

------------------------ var div=document.querySelector(“#div”) var span=document.querySelector(“#span”) var p=document.querySelector(“#p”)
//除名(span);// 如果计划使用innerHTML=''删除子节点;然后使用appendChild插入回去这在IE11中不起作用,因为IE11会清除存储在变量中的任何子节点的innerHTML

比如说

<div id="parent">
    <div id="child">
       <div id="grandchild">
       </div>
    </div>
</div>
var child = document.getElementById('child');
var parent = document.getElementById('parent');
parent.innerHTML = ''; // this line will clear the innerHTML of child object
parent.appendChild(child); // will be broken

var child=document.getElementById('child');
var parent=document.getElementById('parent');
parent.innerHTML='';//此行将清除子对象的innerHTML
parent.appendChild(child);//将被打破
//阅读代码中的内联注释
因此使用parent.textContent='';如果您想为任何替换/附加Child获取儿童html内容,请使用textContent代替innerHTML

[1][2]演示:解决方案是什么?@Jimmyt1988,我知道这是一个非常古老的方法,但对于后代来说,一个等价的方法就是使用textContent
<div id="parent">
    <div id="child">
       <div id="grandchild">
       </div>
    </div>
</div>
var child = document.getElementById('child');
var parent = document.getElementById('parent');
parent.innerHTML = ''; // this line will clear the innerHTML of child object
parent.appendChild(child); // will be broken