Создание окна быстрого поиска с помощью JQuery

У меня есть следующая разметка:

<input type="text" id="comboBox" />
<ul id="comboBoxData">
    <li>1</li>
    <li>12</li>
    <li>123</li>
    <li>1234</li>
    <li>12345</li>
    <li>123456</li>
    <li>1234567</li>
    <li>12345678</li>
</ul>

со следующим кодом JQuery:

$(document).ready(function() {   
    $('#comboBox').bind('keydown keypress keyup change', function () {
        var search = $('#comboBox').val();
        if (search !== '') {
            $('#comboBoxData li').hide();
            $('#comboBoxData li[text*=' + search + ']').show();
        } else {
            $('#comboBoxData li').show();
        }
    });
});

когда я набираю текст типа "1" или "12" в поле поиска "comboBox", он должен отфильтровывать все LI, текст которых не содержит мои поисковые данные, однако по какой-то причине он ничего не отображает. Зачем?

4 ответа

Решение

Ваш пример не работает, потому что текст не является атрибутом li,

Попробуйте использовать filter() вместо этого искать текст:

$('#comboBox').bind('keydown keypress keyup change', function() {
    var search = this.value;
    var $li = $("#comboBoxData li").hide();
    $li.filter(function() {
        return $(this).text().indexOf(search) >= 0;
    }).show();
});

Пример скрипки

Здесь нет text собственность для li, вы можете получить text() Имущество
инстед из:

$('#comboBoxData li').hide();
$('#comboBoxData li[text*=' + search + ']').show();

пытаться

$('#comboBoxData li').each(function(){
   if ( ($this).text().indexOf(search) > -1 ) $(this).show(); 
   else $(this).hide();
});
 $(document).ready(function () {
        $("#comboBoxData li").hide();

        $('#comboBoxData li').each(function (i) {
            $(this).attr('data-text', function () {
                return $(this).text();
            });
        });

        $('#comboBox').bind('change keypress  keyup change', function () {
            $("#comboBoxData li").hide();
            $('#comboBoxData li[data-text*="' + $.trim($(this).val()) + '"]').show();
        });
    });​

для демонстрации в режиме реального времени смотрите эту ссылку: http://jsfiddle.net/nanoquantumtech/B7NxP/

Чтобы найти элемент, который содержит значение из флажка, вы должны пройтись по каждому элементу и использовать функцию.text(), чтобы получить текстовое содержимое тега:

$('#comboBoxData li').each(function() {
    if ($(this).text().indexOf(search) != -1) {
        $(this).show();
    }
});
Другие вопросы по тегам