使用jquery循环遍历列表项

Gal*_*len 48 javascript jquery

我有这段代码

listItems = $("#productList").find("li");

        for (var li in listItems) {
            var product = $(li);
            var productid = product.children(".productId").val();
            var productPrice = product.find(".productPrice").val();
            var productMSRP = product.find(".productMSRP").val();

            totalItemsHidden.val(parseInt(totalItemsHidden.val(), 10) + 1);
            subtotalHidden.val(parseFloat(subtotalHidden.val()) + parseFloat(productMSRP));
            savingsHidden.val(parseFloat(savingsHidden.val()) + parseFloat(productMSRP - productPrice));
            totalHidden.val(parseFloat(totalHidden.val()) + parseFloat(productPrice));

        }
Run Code Online (Sandbox Code Playgroud)

而且我没有得到预期的结果 - totalItems的出现是180+,其余的都是NaN.我怀疑它在哪里使用var product = $(li);或者可能与循环本身的表达式有关.无论哪种方式 - 我需要循环标记的<li>项目<ul>#productList

lon*_*day 119

你需要使用.each:

var listItems = $("#productList li");
listItems.each(function(idx, li) {
    var product = $(li);

    // and the rest of your code
});
Run Code Online (Sandbox Code Playgroud)

这是循环jQuery选择的正确方法.


在现代Javascript中,您还可以使用for .. of循环:

var listItems = $("#productList li");
for (let li of listItems) {
    let product = $(li);
}
Run Code Online (Sandbox Code Playgroud)

但请注意,较旧的浏览器不支持此语法,并且使用上面的jQuery语法可能会更好.

  • 嗯,我在jQuery 1.4.2中做了一些快速基准测试.使用find方法比IE7和Chrome上的聚合选择器慢约30%. (4认同)
  • 只是要添加到此,您可能还想将选择器更改为$("#productList li").而不是使用查找. (2认同)

gir*_*uid 15

你可以使用each这个:

$('#productList li').each(function(i, li) {
  var $product = $(li);  
  // your code goes here
});
Run Code Online (Sandbox Code Playgroud)

话虽这么说 - 你确定你想要每次更新值为+1吗?难道你不能找到计数然后根据它设置值?


rcr*_*ens 6

尝试这个:

listItems = $("#productList").find("li").each(function(){
   var product = $(this);
   // rest of code.
});
Run Code Online (Sandbox Code Playgroud)