jQuery使用每个函数

时间:2014-08-05 15:47:53

标签: jquery each

我有:

<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_11

现在在上面的示例中,我想为每个产品仅显示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>

我感谢任何帮助

1 个答案:

答案 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()

});