Jquery appendTo导致脚本块再次执行

时间:2012-09-21 17:29:04

标签: jquery

如果我使用 appendTo 来移动DOM树的部分,那么移动的脚本块会被重新运行,即它们会运行两次。

实施例: http://jsfiddle.net/EHDqE/

有没有更好的方法来移动DOM部分而不再在其中执行脚本块?

2 个答案:

答案 0 :(得分:1)

两件事:

首先,将脚本直接嵌入代码中并不是一种好习惯。它们应该在标题中引用,并包含在单独的文件中。

其次,我不相信有可能阻止该脚本再次运行,因为appendTo()会对您正在查看的DOM元素执行HTML重写。这意味着您需要直接访问文本,而不是整个元素。 @ Ohgodwhy的解决方案是正确的:

$("#one").text().appendTo("#two")

然而(如果这不是一个家庭作业问题),我会恳请您考虑将脚本移动到标题中,因为这是目前的最佳做法。

答案 1 :(得分:1)

我之前必须做类似的事情......有点hacky但...... http://jsfiddle.net/teewuane/EHDqE/3/

HTML

<div id="one">
 a
 <script type="text/javascript">
     if(times_executed == 0){
         alert(1);
         times_executed+=1;
     } 
 </script>
 </div>
 <div id="two">
  b
 </div>​

SCRIPT

times_executed = 0;


$("#one").appendTo("#two");​