【发布时间】:2012-08-20 14:03:20
【问题描述】:
以下 HTML 和 JavaScript 取自此 jsFiddle 的部分内容: http://jsfiddle.net/stephenjwatkins/2j3ZB/3/
HTML:
<p class="source">
Source
</p>
<div id="target">
<p class="dummy">
Target
</p>
</div>
<button id="transfer-button">Transfer</button>
JavaScript:
var sourceEl = $('.source');
var targetEl = $('#target');
$('#transfer-button').click(function() {
targetEl.html('<p class="dummy">Transferring...</p>');
setTimeout(function() {
// Source element will be empty on second attempt to append
targetEl.html('').append(sourceEl);
}, 750);
return false;
});
请注意,setTimeout 和虚拟文本只是用于视觉指示器。
正如我们所见,在源元素从 DOM 中追加和删除一次之后,IE(所有版本)将在任何进一步追加时向 DOM 添加一个空元素;而所有其他浏览器都会添加正确的非空元素。
另一个增加混乱的方面是 sourceEl 仍然有元素信息(例如sourceEl.attr('class') 将返回“source”)。
我知道缓解该问题的方法(例如sourceEl.clone()),但最好能更好地了解 IE 为何表现不同,以避免将来出现任何相关问题。
是什么导致IE中的源元素在替换元素后唯一为空?
【问题讨论】:
-
在我看来是垃圾收集器的问题,而且 IE 的垃圾收集器似乎比其他浏览器更有效。让我们看看我是否可以详细说明..
标签: javascript jquery internet-explorer dom