我在Jquery脚本上有一些帮助,它创建了一个可搜索,可切换的常见问题解答。代码可以在这里看到:
麻烦的是,如果有一个大写字母“H”的单词“How”并且我搜索“h”,它就找不到它。如何使此脚本不区分大小写?
答案 0 :(得分:6)
或者,您可以使用正则表达式显着减少代码量。 jsFiddle demo
$('#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();
});
根据您当前用于确定相对元素的算法,您可以使用jQuery filter
方法根据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();
答案 1 :(得分:1)
更改此行
$('#result LI:not(:contains('+keywords[i]+'))').hide();
到
$('#result LI').each(function()
{
if(this.innerHTML.toLowerCase().indexOf(keywords[i].toLowerCase()) === -1)
{
$(this).hide();
}
});
答案 2 :(得分:1)
// 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();
}
});
}