我在我的網站上有特定div的歷史記錄功能。到目前爲止,一切正常,我從javascript插入HTML作爲字符串,並用.innerHTML重新顯示它們。現在我嘗試從所有的HTML字符串中清理javascript,並且我遇到了這個問題:div的歷史瀏覽工作在FF,Chrome和其他一些IE瀏覽器(8到11)中,無法理解爲什麼。它是cloneNode()還是我看不到的參考問題?IE appendChild from array not working
下面是一個小的腳本來重現行爲,你可以在這裏玩:http://jsfiddle.net/yvecai/7e8tksm3/
我的代碼工作如下:每次我顯示Mydiv的東西,我會克隆,並在數組中添加它。
函數prev()或next()從數組中追加相應的節點以供顯示。
腳本首先創建5個內容'1'...'5',用戶可以使用函數prev()和next()顯示內容。在IE中,當你去prev()時,然後 next(),只顯示第一個和最後一個記錄。在其他瀏覽器中,沒有問題。
var cache = [];
var i = 0;
function next() {
var hist = document.getElementById('history');
i += 1;
if (i > 4) {
i = 4
};
hist.innerHTML = '';
hist.appendChild(cache[i]);
}
function prev() {
var hist = document.getElementById('history');
i -= 1;
if (i < 0) {
i = 0
};
hist.innerHTML = '';
hist.appendChild(cache[i]);
}
function cacheInHistory(div) {
cache.push(div.cloneNode(true));
}
function populate() {
for (i = 0; i < 5; i++) {
var hist = document.getElementById('history');
hist.innerHTML = '';
var Mydiv = document.createElement('div');
Mydiv.innerHTML = i;
hist.appendChild(Mydiv);
cacheInHistory(Mydiv);
}
i = 4
}
你不追加克隆,你只是附加一個緩存元素。 [追加克隆](http://jsfiddle.net/syx91c2v/)將適用於所有瀏覽器。無論如何,你的原始代碼實際上不應該在任何瀏覽器中工作,因爲'appendChild'應該「剪切」它所添加的元素,儘管它存在於一個變量或數組中。這在IE中更奇怪,只有[緩存元素的內容被削減](http://jsfiddle.net/yy4aht3u/),但緩存的div元素仍然存在。 – Teemu