我试图多次追加在一个jQuery封闭之外定义的元素$.each()
循环看到的- http://jsfiddle.net/benedict_w/8Pczs/
可能有人请解释为什么元素在循环的最后一次迭代只附?
如
<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>
要追加每次都相同的元素。
各追加将它移动到下一个<li>
你需要clone()
元素(或只是重新创建)为每个迭代。
$('<a href="#">remove</a>').appendTo('li');
这将一个新元素附加到每li
同时避免不必要的回路和jQuery对象的创作。
如果存在多于一个的目标元件,然而,插入的元件的克隆拷贝将被用于每个靶的第一之后创建,而新的一组(原始的元素加克隆)被返回。
http://api.jquery.com/appendTo/
你不需要克隆元素插入。 根据定义append()
$('li').append('<a href="#">remove</a>');
//will append an <a> to every <li> in the "set of matched elements"
DEMO
更新 :如果你确实需要的each()
的迭代器做其他的事情,为什么不定义闭合内的元素?
$('li').each(function(){
var remove = $('<a href="#">remove</a>');
$(this).append(remove);
//do other things
});
更新2:只是保持回答高达日期从我从OP的评论学会
因为在你的问题,你提到一个独特的元素(关闭外部定义)。 其中,被附加在第一次迭代的DOM。 下一次你试图同一元素在DOM另一个节点追加。 jQuery的承认,因此,从原处分离它,创建另一个文档片段,然后将其连接到在DOM的新目标。
定义变量“删除”以纯文本格式,即
var remove = '<a href="#">remove</a>';
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');
检查已更新FIDDLE