Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery:对于循环元素attr change,所有元素都有最后一个元素attr_Javascript_Jquery_For Loop - Fatal编程技术网

Javascript jQuery:对于循环元素attr change,所有元素都有最后一个元素attr

Javascript jQuery:对于循环元素attr change,所有元素都有最后一个元素attr,javascript,jquery,for-loop,Javascript,Jquery,For Loop,我的for循环有点问题。我认为这应该是相对容易的,但出于某种原因,我就是想不出来 我有一个for循环,它从一个列表中获取列表项并将它们克隆到另一个列表中。完成此操作后,新列表项需要具有i值的rel属性 循环完成后,所有列表元素都会得到一个rel,其最终i值为3,如下所示 启动HTML Javascript: for (i = 0; i < $('#list li').length; i++) { $('#newList').html($('#list li').clone().attr

我的for循环有点问题。我认为这应该是相对容易的,但出于某种原因,我就是想不出来

我有一个for循环,它从一个列表中获取列表项并将它们克隆到另一个列表中。完成此操作后,新列表项需要具有i值的rel属性

循环完成后,所有列表元素都会得到一个rel,其最终i值为3,如下所示

启动HTML

Javascript:

for (i = 0; i < $('#list li').length; i++) {
  $('#newList').html($('#list li').clone().attr('rel', i));
}
预期产量

实际产量

小提琴:

任何帮助都将不胜感激


谢谢

每次通过循环,您都要克隆所有的lis,为所有克隆赋予相同的rel属性,并将其放入newList的HTML中,以替换上一次迭代中的内容。相反,您应该分别克隆每一个,并将其附加到newList

$list li.eachfunctioni{ $this.clone.attr'rel',i.appendTonewList; }; $html.text$newList.html; 1. 2. 3. 4. 新列表HTML:
每次通过循环,您都要克隆所有的lis,为所有克隆赋予相同的rel属性,并将其放入newList的HTML中,替换上一次迭代中的内容。相反,您应该分别克隆每一个,并将其附加到newList

$list li.eachfunctioni{ $this.clone.attr'rel',i.appendTonewList; }; $html.text$newList.html; 1. 2. 3. 4. 新列表HTML:
您的问题是,每次循环都会用列表中所有li的克隆替换newList的内容。这意味着您将看到for循环的最终迭代结果

试着用每一个-

$('#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)
    );
});

您的问题是,每次循环都会用列表中所有li的克隆替换newList的内容。这意味着您将看到for循环的最终迭代结果

试着用每一个-

$('#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)
    );
});

您应该使用.append中的append函数

$'list li'将选择ul列表中的4个ITEN

解决方案如下:


您应该使用.append中的append函数

$'list li'将选择ul列表中的4个ITEN

解决方案如下:


在每次迭代中,您的代码将用整个克隆列表替换newList的内容,并最后设置rel属性,因此每个克隆的li都将应用相同的rel属性

每个人都试过jQuery的迭代器吗?我发现它更容易阅读

$("ul#list li").each(
function(i,v){
    $(v).clone().attr("rel",i.toString()).appendTo("ul#newList");
}
);

在每次迭代中,您的代码将用整个克隆列表替换newList的内容,并最后设置rel属性,因此每个克隆的li都将应用相同的rel属性

每个人都试过jQuery的迭代器吗?我发现它更容易阅读

$("ul#list li").each(
function(i,v){
    $(v).clone().attr("rel",i.toString()).appendTo("ul#newList");
}
);
使用属性函数的另一种变体

使用属性函数的另一种变体


@Nick请看我的答案,我在最容易适应的过程中更新了解决方案。为什么每次都克隆第一个孩子,而不是克隆原始列表中的每个孩子?@Nick请看我的答案,我在最容易适应的过程中更新了解决方案。为什么每次都克隆第一个孩子,与其克隆原始列表中的每个子元素,还不如在这里认识到$'newList'.html$'list li'是一个jQuery元素数组。因为它代表整个数组,并且循环到达它的末尾,所以最后一个值3将指向所有元素。无论如何,您应该在jQuery中使用.each或$.each而不是常规for循环。这里要了解的重要一点是$'newList'.html$'list li'是一个jQuery元素数组。因为它代表整个数组,并且循环到达它的末尾,所以最后一个值3将指向所有元素。您应该使用.each或$.each,而不是jQuery中的常规for循环。无需调用.toString,当您将一个数字放入属性时,它会自动完成。否则,这与我的答案基本相同。无需调用。toString,当您将数字放入属性时,它会自动完成。否则,这与我的答案基本相同。
<ul id="list">
  <li>1</li>
  <li>2</li>
  <li>3</li>
  <li>4</li>
</ul>
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);
}
$("ul#list li").each(
function(i,v){
    $(v).clone().attr("rel",i.toString()).appendTo("ul#newList");
}
);
for (i = 0; i < $('#list li').length; i++) {
    $('#list li').eq(i).clone().attr('rel', i).appendTo($('#newList'));
}
$('#newList').append($('#list li').clone().attr('rel', function( i){
  return i;
}));