пример
Другая опция, основанная на коде @Peeter.
HTML:
<input type="text" id="input1"/>
<ul id="list">
<li>Rich</li>
<li>Rajim</li>
<li>Andres</li>
<li>Jorge</li>
<li>Pedro</li>
...
<li>Raul</li>
<li>Paula</li>
<li>Delfina</li>
</ul>
CSS:
li.h {display:none;}
JS:
содержит селектор
$.extend($.expr[':'], {
'containsi': function(elem, i, match, array)
{
return (elem.textContent || elem.innerText || '').toLowerCase()
.indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
// first option
$("#input1").keyup(function() {
var search = $(this).val().toLowerCase();
$._list = ($._list) ? $._list : $("#list li"); //cache
$._list
.removeClass("h")
.filter(":not(:containsi('"+search+"'))").addClass("h");
});
EDIT
Я думаю, что немного написано в коде, мне нравится опция сначала спрятать, а затем отобразить.
пример
JS:
// second option
$("#input1").keyup(function() {
var search = $(this).val().toLowerCase();
$._list = ($._list) ? $._list : $("#list li");
$._list
.addClass(function(index, currentClass) {
var addedClass;
if (currentClass !== "h" )
addedClass = "h";
return addedClass;
}).filter(":containsi('"+search+"')").removeClass("h");
});
// third opcion
$("#input1").keyup(function() {
var search = $(this).val().toLowerCase();
$._list = ($._list) ? $._list : $("#list li");
$._list
.hide()
.filter(":containsi('"+search+"')").show();
});