如果声明不能正常工作

时间:2014-10-27 10:12:04

标签: javascript jquery

我有一个网店和jquery我需要在添加产品时检查它是否存在于购物车中,那么它应该增加数量而不是创建一个新行。

我用来检查购物车中是否存在的代码如下:

if ($(".store-purchase-list-quantity-plus").attr('part') != SalesNO) 

如果这是真的,它应该添加一个新行。如果它是假的,它应该增加数量。 SalesNO是产品ID。

这仅适用于购物车中的第一个产品,然后它会不断添加新行。在我看来if语句只检查第一个" .store-purchase-list-quantity-plus",即使DOM中有多个。

如何更改我的if语句,以便检查所有.store-purchase-list-quantity-plus"之后(attr = salesNO)

2 个答案:

答案 0 :(得分:1)

它的工作正是应有的。这不是你期望它的工作方式。

来自documentation

  

.attr()方法仅获取匹配集中 first 元素的属性值。要单独获取每个元素的值,请使用循环结构,例如jQuery的.each().map()方法。

jQuery中有许多循环结构,但考虑到你的特殊需要 - 找出一个元素在一组匹配的元素中具有特定的属性值 - 使用.filter()可能是最好的选择

var partExists = $(".store-purchase-list-quantity-plus").filter(function() {
    return $(this).attr('part') == SalesNO;
}).length > 0; // there's an element with a part attribute matching SalesNO
if(partExists) {
    // increase quantity
}
else {
    // add new entry
}

答案 1 :(得分:0)

如果页面上有更多匹配store-purchase-list-quantity-plus的匹配项,您仍然只会选择第一个$(".store-purchase-list-quantity-plus")。 制作一个循环来检查所有。