jQuery.clone()导致浏览器挂起

时间:2011-12-05 00:48:11

标签: javascript jquery

为什么以下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克隆的方式有关。

编辑2

似乎jQuery导致克隆中的脚本元素被执行。这不是标准的行为,而是关于jQuery如何克隆这种非常意外的事情。

2 个答案:

答案 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 ...

的脚本