javascript - jQuery:for循环元素属性变化,所有元素都有最后一个元素属性

标签 javascript jquery for-loop

我的 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/

非常感谢任何帮助。

谢谢!

最佳答案

每次通过循环,您都在克隆所有 li,为所有克隆提供相同的rel 属性,然后将在 #newList 的 HTML 中(替换上一次迭代中放置的内容)。相反,您应该分别克隆每一个,并将其附加到 #newList

$("#list li").each(function(i) {
  $(this).clone().attr('rel', i).appendTo("#newList");
});
$("#html").text($("#newList").html());
<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>

关于javascript - jQuery:for循环元素属性变化,所有元素都有最后一个元素属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35095282/

相关文章:

javascript - 导航栏动画不会在使用 Velocity.js 的滚动事件上停止(适用于 jQuery)

javascript - 坚持根据来自restFul API的数据实现自动完成

javascript - 模式关闭/隐藏时页面不刷新

actionscript-3 - as3中的EventListener和for循环

javascript - 自定义 Select 和 Input 标签,IE 版本看起来很糟糕

javascript - 根据单击的按钮更改表单操作

javascript - 绝对定位的元素在删除时影响另一个元素

javascript - 如何从渐变映射数字特定颜色

python - 如何从文件中读取数据并获取索引输出

python - 一种在 python 中比较字典值并打印它们的键的方法