Создание окна быстрого поиска с помощью 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();
}
});