使用jQuery过滤表行列表

时间:2013-12-15 06:32:34

标签: jquery

此列表不是过滤器,我在执行过滤器之前和之后获得相同的长度。 txtval值是正确的。

$("#filter").on('keyup', function(e){
  var val = this.value.toLowerCase();

  c.log('trs', $trs.length);
  $trs.filter(function(i){
    var $el = $(this).find('td:nth-child(2) a')
      , txt = $el.text().toLowerCase();

    //c.log('test', txt, val);
    return !!txt.indexOf(val);
  });

  c.log('trs', $trs.length);
});

这是HTML:

<tr>
    <td class="numeric"><a id="btc" class="rank">1</a></td>
    <td>
        <img src="img/Bitcoin.png" class="currency-logo">
        <a href="http://www.bitcoin.org" target="_blank">Bitcoin</a>
     </td>
</tr>
<tr>
    <td class="numeric"><a id="ltc" class="rank">2</a></td>
    <td>
         <img src="img/Litecoin.png" class="currency-logo">
         <a href="http://litecoin.org" target="_blank">Litecoin</a>
    </td>
</tr>

1 个答案:

答案 0 :(得分:1)

您只是假设filter将对源对象进行修改。但事实并非如此。它实际上会根据其中提供的条件返回一组filtered elements。请详细了解here

试试这个,

$("#filter").on('keyup', function(e){

     var val = this.value.toLowerCase();    
     c.log('trs', $trs.length);

     c.log('trs',   $trs.filter(function(i){
       var $el = $(this).find('td:nth-child(2) a');
       var txt = $el.text().toLowerCase();
       return txt.indexOf(val) > -1;
     }).length;
   );

});