Этот список не является фильтром, я получаю ту же длину до и после выполнения фильтра. Значения 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>
Вы только предположили, что filter
будет выполнять модификации исходного объекта. Но это не так. Он фактически возвращает набор filtered elements
на основе условия, содержащегося внутри него. Подробнее об этом читайте здесь.
Попробуй это,
$("#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;
);
});