为什么以下jQuery代码导致我的浏览器挂起?
<!DOCTYPE HTML>
<title>Simple clone</title>
<script type="text/javascript" src="jquery.js"></script>
<div>
<script>$('div').clone().appendTo('body');</script>
</div>
对于处于“无限循环”阵营的人来说,这应该不是问题。一个非常安全(非jQuery)的版本是:
<div>div
<script>
var el = document.getElementsByTagName('div')[0];
document.body.appendChild(el.cloneNode(true));
</script>
</div>
所以这个问题与jQuery克隆的方式有关。
似乎jQuery导致克隆中的脚本元素被执行。这不是标准的行为,而是关于jQuery如何克隆这种非常意外的事情。
答案 0 :(得分:7)
因为你正在克隆一个div,里面有一个写着克隆所有div的脚本。克隆所有div的原始div脚本也被克隆,依此类推, ad infinitum
当然可以这样做:
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(function() {
$('div').clone().appendTo('body');
});
</script>
<div>
Safe Now
</div>
答案 1 :(得分:2)
这是一个无限循环。你正在克隆一个div,它包含一个克隆2个div的脚本,这个div有一个克隆4 ...
的脚本