我在创建可搜索、可切换的常见问题解答的 Jquery 脚本上获得了一些帮助。代码可以在这里看到:
麻烦的是,如果有一个大写字母“H”的单词“How”,我搜索“h”,它不会找到它。如何使此脚本不区分大小写?
我在创建可搜索、可切换的常见问题解答的 Jquery 脚本上获得了一些帮助。代码可以在这里看到:
麻烦的是,如果有一个大写字母“H”的单词“How”,我搜索“h”,它不会找到它。如何使此脚本不区分大小写?
或者,您可以使用正则表达式显着减少代码量。jsFiddle 演示
$('#search').keyup(function(e) {
    // create the regular expression
    var regEx = new RegExp($.map($(this).val().trim().split(' '), function(v) {
            return '(?=.*?' + v + ')';
        }).join(''), 'i');
    // select all list items, hide and filter by the regex then show
    $('#result li').hide().filter(function() {
        return regEx.exec($(this).text());
    }).show();
});
根据您当前确定相关元素的算法,您可以使用 jQueryfilter方法根据keywords数组过滤结果。这是一个粗略的想法:
// select the keywords as an array of lower case strings
var keywords = $(this).val().trim().toLowerCase().split(' ');
// select all list items, hide and filter then show
$('#result li').hide().filter(function() {
    // get the lower case text for the list element
    var text = $(this).text().toLowerCase();        
    // determine if any keyword matches, return true on first success
    for (var i = 0; i < keywords.length; i++) {
        if (text.indexOf(keywords[i]) >= 0) {
            return true;
        }
    }
}).show();
更改此行
$('#result LI:not(:contains('+keywords[i]+'))').hide();
到
$('#result LI').each(function()
{
    if(this.innerHTML.toLowerCase().indexOf(keywords[i].toLowerCase()) === -1)
    {
        $(this).hide();
    }
});
// split the search into words
var keywords = s.toLowerCase().split(' ');
// loop over the keywords and if it's not in a LI, hide it
for(var i=0; i<keywords.length; i++) {
    $('#result LI').each(function (index, element) {
        if ($(element).text().toLowerCase().indexOf(keywords) != -1) {
            $(element).show();
        } else {
            $(element).hide();
        }
    });
}