我有:
<tr>
<td>Blah Blah<td>
<td>Blah Blah<td>
<td class="product_1">1,000</td>
</tr>
<tr>
<td>Blah Blah<td>
<td>Blah Blah<td>
<td class="product_2">1,200</td>
</tr>
<tr>
<td>Blah Blah<td>
<td>Blah Blah<td>
<td class="product_2">1,400</td>
</tr>
<tr>
<td>Blah Blah<td>
<td>Blah Blah<td>
<td class="product_1">1,600</td>
</tr>
<tr>
<td>Blah Blah<td>
<td>Blah Blah<td>
<td class="product_1">1,800</td>
</tr>
每个tr
代表一个产品详细信息行,而在产品td
的最新price
类中,您可以看到产品id
,如{{} 1}} product_1
是1
。
现在在上面的示例中,我想为每个产品仅显示1个价格,id
所以在做了上述事情之后,我需要:
cheapest one!
我假设我需要使用jQuery这样的每个函数:
<tr>
<td>Blah Blah<td>
<td>Blah Blah<td>
<td class="product_1">1,000</td>
</tr>
<tr>
<td>Blah Blah<td>
<td>Blah Blah<td>
<td class="product_2">1,200</td>
</tr>
我感谢任何帮助
答案 0 :(得分:2)
您可以使用filter
方法过滤元素:
var $td = $('td[class^="product_"]');
$td.each(function () {
$td.filter(':visible')
.filter('.' + this.className)
.hide()
.sort(function (a, b) {
return +a.textContent > +b.textContent;
}).first().show();
});
由于您可以更改标记,我建议使用data-*
属性,例如:
示例行:
<tr data-amount="1000" data-cat="1">
<td>Blah Blah</td>
<td>Blah Blah</td>
<td class="whatever">1,000 ...</td>
</tr>
jQuery的:
var $tr = $('tr[data-cat]');
$tr.each(function () {
var cat = $(this).data('cat');
$tr.filter(':visible')
.filter('[data-cat="' + cat + '"]')
.hide()
.sort(function (a, b) {
return +$(a).data('amount') > +$(b).data('amount')
}).first().show();
});
要在每个类别中显示超过1个便宜商品,您可以尝试以下代码:
var $tr = $('tr[data-cat]'),
filtered = [];
$tr.each(function () {
var cat = $(this).data('cat');
if ($.inArray(cat, filtered) > -1) return;
filtered.push(cat);
var $set = $tr.filter('[data-cat="' + cat + '"]');
var min = Math.min.apply(Math, $set.map(function() {
return +$(this).data('amount');
}).get());
$set.hide().filter('[data-amount="' + min + '"]').show()
});