1

我有一个使用 2 个输入过滤我的搜索结果的代码。我为此使用jquery。

<script>
$(document).ready(function () {
    $(".search").keyup(function () {

        $(".searchli").hide();

        if ($("#refine").val() != "") {
            var term = $("#search").val() + " " + $("#refine").val();
        } else {
            var term = $("#search").val();
        }

        $("li:contains('" + term + "')").show();
    });
});    
</script>

Search: <input type="search" id="search" class="search" length="24" />
Refine    <input type="search" id="refine" class="search" length="24" />

我的结果列表包含大写和小写。我的问题是我无法以小写字母搜索(以小写字母键入关键字)然后找不到任何结果。

如何添加toLowerCase()或添加toUpperCase()到我的代码中以使其正常工作?

4

2 回答 2

1

您可以使用此页面上的此代码段覆盖 jQuery 包含选择器以忽略大小写:

$.expr[":"].contains = $.expr.createPseudo(function(arg) {
    return function( elem ) {
        return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
    };
});

或者,您可以通过调用 :containsInvariant 或其他名称来创建一个新的选择器,而不是覆盖 :contains (理论上这可能会在其他脚本中导致奇怪的行为)。

编辑:这与所有版本的 jQuery 不兼容,所以这里应该适用于所有版本:

// An implementation of a case-insensitive contains pseudo
// made for all versions of jQuery
(function( $ ) {

function icontains( elem, text ) {
    return (
        elem.textContent ||
        elem.innerText ||
        $( elem ).text() ||
        ""
    ).toLowerCase().indexOf( (text || "").toLowerCase() ) > -1;
}

$.expr[':'].icontains = $.expr.createPseudo ?
    $.expr.createPseudo(function( text ) {
        return function( elem ) {
            return icontains( elem, text );
        };
    }) :
    function( elem, i, match ) {
        return icontains( elem, match[3] );
    };

})( jQuery );
于 2013-07-05T13:35:43.880 回答
0

使用来修补包含函数以不区分大小写...

编辑- 这是代码

// NEW selector
jQuery.expr[':'].Contains = function(a, i, m) {
    return jQuery(a).text().toUpperCase()
        .indexOf(m[3].toUpperCase()) >= 0;
};

// OVERWRITES old selecor
jQuery.expr[':'].contains = function(a, i, m) {
    return jQuery(a).text().toUpperCase()
        .indexOf(m[3].toUpperCase()) >= 0;
};

jQuery 1.8 版本

$.expr[":"].contains = $.expr.createPseudo(function(arg) {
    return function( elem ) {
        return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
    };
});
于 2013-07-05T13:34:15.220 回答