我的for循环遇到了一些麻烦。我认为这应该相对容易,但由于某些原因我无法弄明白!
我有一个for循环,它从一个列表中获取列表项并将它们克隆到另一个列表中。完成此操作后,新列表项需要具有i
值的rel属性。
循环完成后,所有列表元素都会被赋予一个具有最终i
值的rel(3) - 如下所示。
启动HTML
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<ul id="newList">
</ul>
使用Javascript:
for (i = 0; i < $('#list li').length; i++) {
$('#newList').html($('#list li').clone().attr('rel', i));
}
预期输出
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<ul id="newList">
<li rel="0">1</li>
<li rel="1">2</li>
<li rel="2">3</li>
<li rel="3">4</li>
</ul>
实际输出
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<ul id="newList">
<li rel="3">1</li>
<li rel="3">2</li>
<li rel="3">3</li>
<li rel="3">4</li>
</ul>
FIDDLE: https://jsfiddle.net/dtxs4nxj/
非常感谢任何帮助。
谢谢!
答案 0 :(得分:2)
每次完成循环,您都会克隆所有 li
s,为所有克隆提供相同的rel
属性,并将其放入HTML中#newList
的替换(替换上一次迭代中放置的内容)。相反,您应该单独克隆每个,并将其附加到#newList
。
$("#list li").each(function(i) {
$(this).clone().attr('rel', i).appendTo("#newList");
});
$("#html").text($("#newList").html());
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<ul id="newList">
</ul>
<br>newList HTML:
<div id="html"></div>
&#13;
答案 1 :(得分:1)
您的问题是,每次循环播放时,#newList
的内容都会替换为li
中所有#list
的克隆。这意味着您将看到for
循环的最终迭代结果。
尝试使用.each
代替 -
$('#list li').each (function (index, me){
// "index" is the index of the li and "me" is the li itself
// "append" will add the cloned element to the end of "#newList"
$('#newList').append(
$(me).clone().attr('rel', index)
);
});
答案 2 :(得分:1)
您应该使用.append
中的追加功能。
$('#list li')
将在ul
列表中选择4个itens。
<ul id="list">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
这就是为什么我得到了first-child
:
$('#list li:first-child').clone()
for (var i = 0; i < $('#list li').length; i++) {
var newLi = $('#list li:first-child').clone();
newLi.html(i+1)
newLi.attr('rel', i+1);
$('#newList').append(newLi);
}
此处的解决方案:
答案 3 :(得分:1)
在每次迭代中,您的代码都将“#newList”的内容替换为整个克隆列表,并最后设置“rel”属性,因此每个克隆的“li”都会应用相同的“rel”属性。 / p>
您是否尝试过jQuery的迭代器,每个()?我发现它更容易阅读。
$("ul#list li").each(
function(i,v){
$(v).clone().attr("rel",i.toString()).appendTo("ul#newList");
}
);
答案 4 :(得分:1)
[1, 2, 3, 4, 5].forEach(function(item) { console.log(item, arguments); });
答案 5 :(得分:1)
使用attr(function)
$('#newList').append($('#list li').clone().attr('rel', function( i){
return i;
}));