我在我的网站上有特定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