$ .each()中的jQuery追加元素

时间:2012-09-13 16:50:49

标签: append jquery

我试图在jQuery $.each()循环中重复追加在闭包之外定义的元素,请参阅 - http://jsfiddle.net/benedict_w/8Pczs/

有人可以解释一下为什么元素只附加在循环的最后一次迭代中吗?

e.g。

<ul>
    <li>blah</li>
    <li>blah</li>
    <li>blah</li>
</ul>

使用以下jquery:

var remove = $('<a href="#">remove</a>');
$('li').each(function(){
    $(this).append(remove);       
});​

生产者:

<ul>
    <li>blah</li>
    <li>blah</li>
    <li>blah <a href="#">remove</a></li>
</ul>

5 个答案:

答案 0 :(得分:6)

每次都附加相同的元素 每个附加内容都会将其移至下一个<li>

每次迭代都需要clone()元素(或者只是重新创建它)。

答案 1 :(得分:2)

$('<a href="#">remove</a>').appendTo('li');

这将为每个li添加一个新元素,同时避免不必要的循环和jQuery对象创建。

  

但是,如果有多个目标元素,则会在第一个目标元素之后为每个目标创建插入元素的克隆副本,并返回该新集合(原始元素加克隆)。

http://api.jquery.com/appendTo/

答案 2 :(得分:1)

您无需克隆要插入的元素。根据{{​​3}}

的定义
$('li').append('<a href="#">remove</a>'); 
//will append an <a> to every <li> in the "set of matched elements"

append()

<强>更新: 如果你确实需要each()迭代器做其他事情,为什么不在闭包内定义你的元素呢?

$('li').each(function(){
    var remove = $('<a href="#">remove</a>');
    $(this).append(remove);       
    //do other things
});​

更新2 :只是根据我从OP的评论中获得的答案保持最新答案

因为在您的问题中,您引用了一个唯一元素(在闭包之外定义)。其中,在第一次迭代时附加到DOM。下次您尝试将相同的元素追加到DOM中的另一个节点时。 jQuery认识到这一点,将其从它的位置分离,创建另一个文档片段,然后将它附加到DOM中的新目标。

答案 3 :(得分:0)

将变量“remove”定义为纯文本,即

var remove = '<a href="#">remove</a>';

答案 4 :(得分:0)

var remo[enter link description here][1]ve = $(

搞乱你的代码。它正在附加元素因为它正在发生..只是将它作为字符串而不是选择器传递或克隆对象..这应该为你完成工作,

var remove = '<a href="#">remove</a>' ;
$('li').each(function(){
    $(this).append(remove);       
});​

您也可以使用appendTo来避免迭代

$('<a href="#">remove</a>').appendTo('li');

检查UPDATED FIDDLE