jQuery过滤器通过文本输入选择选项

jQuery filter select options by text input

本文关键字:输入 选择 选项 文本 过滤器 jQuery      更新时间:2023-09-26

我有一个选择列表,我想在其中筛选文本输入中的选项。

我写了这个jQuery代码:

$('#NotPublishedSelectFilter').keyup(function () {
    console.log("NotPublishedSelectFilter keyup");
    var filterText = $(this).val();
    console.log("filterText: " + filterText);
    var allOptions = $('#NotPublishedSelect').find('option');
    allOptions.each(function (i, e) {
        console.log(i);
        if (e.text().indexOf(filterText) != -1) {
            e.show();
            console.log("show");
        } else {
            e.hide();
            console.log("hide");
        }
    });
});

然而,我得到了错误Uncaught TypeError: e.text is not a function。我进入了每个循环,所以应该有一些选择e.

我做错了什么?

必须使用jQuery对象中的当前值才能访问.text()方法。尝试:

    $('#NotPublishedSelectFilter').keyup(function () {
        console.log("NotPublishedSelectFilter keyup");
        var filterText = $(this).val();
        console.log("filterText: " + filterText);
        var allOptions = $('#NotPublishedSelect').find('option');
        allOptions.each(function (i, e) {
            console.log(i);
            if ($(this).text().indexOf(filterText) != -1) {
                $(this).show();
                console.log("show");
            } else {
                $(this).hide();
                console.log("hide");
            }
        });
    });

尝试在循环中更改选择器:-

$('#NotPublishedSelectFilter').keyup(function () {
    console.log("NotPublishedSelectFilter keyup");
    var filterText = $(this).val();
    console.log("filterText: " + filterText);
    var allOptions = $('#NotPublishedSelect').find('option');
    allOptions.each(function (i, e) {
        console.log(i);
        if ($(e).text().indexOf(filterText) != -1) {
            $(e).show();
            console.log("show");
        } else {
            $(e).hide();
            console.log("hide");
        }
    });
});

它可能会对你有所帮助。

您需要对象变量,但需要访问事件变量。所以请使用这个

$('#NotPublishedSelectFilter').keyup(function () {
    console.log("NotPublishedSelectFilter keyup");
    var filterText = $(this).val();
    console.log("filterText: " + filterText);
    var allOptions = $('#NotPublishedSelect').find('option');
    allOptions.each(function (i, e) {
        console.log(i);
        $(this).text()
        if ($(this).text().indexOf(filterText) != -1) {
            $(this).show();
            console.log("show");
        } else {
            $(this).hide();
            console.log("hide");
        }
    });
});