2016-09-28 58 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