10

我想过滤不区分大小写的列表。我只想匹配不匹配大写或小写的字符。

  1. XXXXXXX
  2. 呸呸呸呸
  3. XXXXX

如果我在搜索框中输入“X”,它会同时显示 1 和 3。我添加了下面的代码,但它也区分大小写。

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">
</script>
<script>
    function filter(element) {
        var value = $(element).val();
        $("#theList > li").each(function() {
            if ($(this).text().search(value) > -1) {
                $(this).show();
            }
            else {
                $(this).hide();
            }
        });
    }
</script>
</head>
<body>
<input type="text" onkeyup="filter(this)" />
<ul id="theList">
    <li>xxvxvxx</li>
    <li>yyyyyyyyyy</li>
    <li>rrrrrrrrrr</li>
    <li>vvvvvvvvvvv</li>
    <li>xcvcvdfsdf</li>
    <li>hkjhkhjkh</li>
    <li>xzfgfhfgh</li>
</ul>

</body>
</html>
4

4 回答 4

19

你需要使用indexOf

$(this).text().search(value)

应该是

$(this).text().indexOf(value)

以及为什么要使用属性标签附加事件。这是一种不好的做法,应该避免。

您可以使用 jQuery 附加事件。

$('input').keyup(function() {
    filter(this); 
});

function filter(element) {
    var value = $(element).val().toLowerCase();
    $("#theList > li").each(function () {
        var $this = $(this),
            lower = $this.text;
        if (lower.indexOf(value) > -1) {
            $this.show();
        } else {
            $this.hide();
        }
    });
}

检查小提琴

使用相同的功能更好一点filter

function filter(element) {
    var value = $(element).val().toLowerCase();
    $("#theList > li").hide().filter(function() {
        return $(this).text().toLowerCase().indexOf(value) > -1;
    }).show();
}
于 2013-08-10T10:44:46.130 回答
5

只需更换

$(this).text().search(value) > -1

和:

$(this).text().search(new RegExp(value, "i")) > -1

这应该可以解决问题。这是一个有效的FIDDLE

于 2013-08-10T11:00:46.900 回答
3

只需添加 jQuery.expr[":"].contains = function (a, i, m) { return (a.textContent || a.innerText || "").toUpperCase().indexOf(m[3].toUpperCase())>=0;};

于 2015-08-18T10:54:01.913 回答
-1

尝试这个 :

  function filter(element) {
        var value = $(element).val();
        $("#theList > li").hide();
        $("#theList > li:contains('" + value + "')").show();
    }
于 2013-08-10T10:48:28.577 回答