我有一个网店和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)
答案 0 :(得分:1)
它的工作正是应有的。这不是你期望它的工作方式。
.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")
。
制作一个循环来检查所有。