Javascript 为什么下面的代码生成4个元素而不是2个?

Javascript 为什么下面的代码生成4个元素而不是2个?,javascript,jquery,html,Javascript,Jquery,Html,我试图理解,为什么下面的代码会生成四个新段落而不是两个 有人能解释一下($()p)之前($()克隆()的$()中到底发生了什么吗零件 $(文档).ready(函数(){ $(“按钮”)。单击(函数(){ $(“p”)。在($(“p”).clone()之前; }); }); 第1段 第2段 克隆所有p元素,并将它们附加到body元素 克隆复制每个并返回前面插入的两个段落元素 一个更有意义的解释: HTML中有两个元素 $(“p”).clone()克隆这两个元素并将它们传递给before()

我试图理解,为什么下面的代码会生成四个新段落而不是两个

有人能解释一下($()p)之前($()克隆()的
$()中到底发生了什么吗零件


$(文档).ready(函数(){
$(“按钮”)。单击(函数(){
$(“p”)。在($(“p”).clone()之前;
});
});
第1段

第2段

克隆所有p元素,并将它们附加到body元素
克隆复制每个
并返回前面插入的两个段落元素

一个更有意义的解释:

  • HTML中有两个
    元素

  • $(“p”).clone()克隆这两个元素并将它们传递给
    before()

  • before()
    执行两次,每个段落执行一次

作为输出,您将获得2*2=4个新段落。

$(“p”).clone()单独产生结果

然后,$(($p”).clone()之前的$($p”).clone()表示它将在两个段落标记之前附加$($p”).clone()的结果

当您克隆()时,它会创建
p
元素的深度副本

before()
不仅会将副本附加到现有元素,还会附加到克隆的元素

使用更具体的类名来附加它们,而不是$(“p”),特别是当克隆的元素和您之前插入的元素是相同类型的元素时

至少使用像这样的不同元素

$(“p”).clone().appendTo('body')


$(文档).ready(函数(){
$(“按钮”)。单击(函数(){
$(“p”).clone().appendTo('.clone target');
});
});
第1段

第2段

克隆所有p元素,并将它们附加到body元素
能否为此创建一个代码段?这将使我们更容易看到实际导致问题的行为。制作结果的屏幕截图并发布在此处。需要认识到内部
$(选择器)。someMethod()
$(选择器)创建的集合中的所有元素进行内部循环
我认为问题在于为什么它会生成4而不是2。推理是有缺陷的
before()
不会创建任何内容itself@char啊,我措词不当,asecond@char修正了。这就是你晚上睡两个小时所得到的:)谢谢。这很好地回答了我的问题。