此列表不是过滤器,我在执行过滤器之前和之后获得相同的长度。 txt
和val
值是正确的。
$("#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>
答案 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;
);
});