使用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)); }
我没有得到预期的结果 – totalItems出来了180+,其余全部是NaN。 我怀疑它在哪里使用var product = $(li);
或者也许在循环本身的expression。 无论哪种方式 – 我需要循环<ul>
标记为#productList
你需要使用.each
:
var listItems = $("#productList li"); listItems.each(function(idx, li) { var product = $(li); // and the rest of your code });
这是循环jQueryselect的正确方法。
你可以使用这个:
$('#productList li').each(function(i, li) { var $product = $(li); // your code goes here });
这就是说 – 你确定你想每次更新值为+1? 难道你不能find计数,然后设置基于这个值?
尝试这个:
listItems = $("#productList").find("li").each(function(){ var product = $(this); // rest of code. });
试试这个代码。 通过使用父>子select器“#productList李”它应该find所有李元素。 然后,可以使用each()方法遍历结果对象,该方法只会改变已经find的li元素。
listItems = $("#productList li").each(function(){ var product = $(this); 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)); });
为了得到更明确的答案,您需要发布一些标记。 你可以简化你的jQuery相当多,如下所示:
$("#productList li").each(function() { var product = $(this); var productid = $(".productId", product).val(); var productPrice = $(".productPrice", product).val(); var productMSRP = $(".productMSRP", product).val(); // the rest remains unchanged }
要解决这个问题,不用jQuery .each()
你必须修改你的代码,如下所示:
var listItems = $("#productList").find("li"); var ind, len, product; for ( ind = 0, len = listItems.length; ind < len; ind++ ) { product = $(listItems[ind]); // ... }
错误在您的原始的代码:
-
for ... in
也会遍历所有inheritance的属性; 即你也将获得由jQuery定义的所有函数的列表。 -
循环variables
li
不是列表项,而是列表项的索引 。 在这种情况下,索引是一个正常的数组索引(即整数)
基本上你是保存使用.each()
因为它更舒适,但特别是当你循环更大的数组时,这个答案中的代码将更快。
对于.each()
其他select,你可以看看这个性能比较: http : .each()