jQuery循环只返回数组的最后一个元素

jQuery loop is only returning the last element of an array

提问人:Andrew Humphries 提问时间:7/3/2019 最后编辑:Rob KwasowskiAndrew Humphries 更新时间:7/3/2019 访问量:315

问:

我只收到我正在循环的数组的最后一个元素,该元素位于函数中。

我已经尝试了基本的 for 循环和 forEach 循环,但没有任何效果。

(function(d,$){
  let titles = ["foo", "bar", "baz", "bop"]
  $('li').forEach((ele, i)=>{
    $("li").attr('titles', `i am ${titles[i]}`)
  })
})(dojo, dojo.query);

DOM 中的每个都应该有一个唯一的标题,第一个应该是 foo,第二个应该是 bar,依此类推。li

目前,所有的标题都是 bop。li

jquery 循环 闭包

评论

1赞 Patrick Roberts 7/3/2019
$('li').attr()影响每次迭代的所有元素。请改用。$(this).attr()

答:

0赞 Akhilesh 7/3/2019 #1

只要改变你forEach循环,

$('li').each((i, elm)=>{
  $(this).attr('titles', `i am ${titles[i]}`);
});
0赞 Andrew Humphries 7/3/2019 #2

我想通了。

    (function(d,$){
  let titles = ["foo", "bar", "baz", "bop"]
  titles.forEach((ele, i)=>{
    $(`li.${titles[i]}`).attr('titles', `i am ${titles[i]}`)
  })
})(dojo, dojo.query);

问题是我每次循环时都设置了每个 li。因此,我只是遍历我创建的数组,并使用插值设置目标和消息。