3

我有以下标记:

<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”之类的文本时,它应该过滤掉所有文本不包含我的搜索数据的 LI,但由于某种原因,它什么也不显示。为什么?

4

4 回答 4

7

您的示例不起作用,因为 text 不是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();
});

示例小提琴

于 2012-05-21T13:21:17.827 回答
0

没有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();
});
于 2012-05-21T13:22:31.880 回答
0

要从复选框中找到包含值的元素,您必须遍历每个元素并使用 .text() 函数来获取标签的文本内容:

$('#comboBoxData li').each(function() {
    if ($(this).text().indexOf(search) != -1) {
        $(this).show();
    }
});
于 2012-05-21T13:25:57.207 回答
0
 $(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();
        });
    });​

for live demo see this link: http://jsfiddle.net/nanoquantumtech/B7NxP/

于 2012-05-21T13:37:23.973 回答