2016-09-28 29 views
0

我有一个Javascript单页面应用程序,它有很多代码。Javascript单页应用程序在IE11中的奇怪行为

主要想法是,我的应用程序创建画布,并根据各种数据绘制各种东西 。

每个画布都在div容器内。每个div容器还包含画布旁边的段落。

一切工作在Chrome和Firefox罚款,但在IE 11什么奇怪的事情发生:它们被附加到主文档后

的div容器是空的。 我不知道为什么。

另一个奇怪的事情是,如果我通过在容器div的追加,那么画布和段落也被附加和明显的两个部分后插入下面的代码破解程序:

var foo = some_var; //where some_var is undefined 

所以,代码是巨大的,但这里是一个样本,只是为了让一个想法:

A.js文件:

var paragraph = document.createElement("p"); 
var textnode = document.createTextNode("some text"); 
var div = document.createElement("div"); 
paragraph.appendChild(textnode); 
div.appendChild(paragraph); 
div.appendChild(canvas); 

someOBJ.html = div; 

B.js文件:

var parent2 = document.getElementById(parentId); 
parent2.innerHTML = ""; 
parent2.style.width = '100%'; 

//someOBJs is an array of someOBJ from the A.js file 
for(var i = 0; i < someOBJs.length; i++){ 
     parent2.appendChild(someOBJs[i].html); 
} 

如果我在这里插入断裂代码(使用的东西是不确定的),我上面提到的那么画布和段被追加,否则只有在div容器(someOBJs [I]的.html)被附加

+0

控制台错误? – mplungjan

+0

@mplungjan如果我不插入破解代码,则不会显示错误 – whitefang1993

+0

我看到您正在追加'canvas',但定义的位置在哪里?我认为我们错过了一些代码。 – ps2goat

回答

0

在IE中可能与this bug有关innerHTML = ""有关。尝试使用removeChild之清空DIV:

while (parent2.lastChild) 
    elm.removeChild(parent2.lastChild); 

在另一方面,作为原因可能与性能相关的:使用document fragment你可以代替一次连接所有节点的DOM一个接一个:

var elements = document.createDocumentFragment(); 
for(var i = 0; i < someOBJs.length; i++){ 
    elements.appendChild(someOBJs[i].html); 
} 
parent2.appendChild(elements); 
+0

innerHTML =“”是问题,谢谢。 – whitefang1993