我用jquery写了非常简单的搜索方法,这是我的方法:
function filter () {
array = []
// Search For items on Searchbox
var name = $(this).find('.info').text().toLowerCase()
items = name.match( $('#Search').val().toLowerCase() )
// Select Valid items
if ( items != null ){
array.push(items)
$(this).addClass('Result');
return items;
}
}
这种方法效果很好,但问题是结果
如果我们有这个文本
Enjoy your company
"享受你的"是true
但是"您的享受"是false
。
如何让我的方法更好地解决这个问题,如果单词的顺序不同,我可以抓住它?
我希望如果用户搜索"享受你的z"结果应为false
答案 0 :(得分:0)
您可以考虑使用split()
方法来实现此结果。
即使单词的顺序不同,您也可以解决以下更新的代码。
array = [];
$('#Search').keyup(function (e) {
$("body").find(".info").each(function(index){
var matchedIndexes = [];
var name = $(this).text().toLowerCase().trim();
var splitedArray = name.split(" "); // to split by space
var splitedSearch =$('#Search').val().toLowerCase().trim().split(" ");
for(var i=0;i<splitedArray.length;i++){
if(i == 0)
var matchedLength = 0;
for(var j=0;j<splitedSearch.length;j++){
if (splitedArray[i].indexOf(splitedSearch[j]) == 0){
if(splitedArray.length >= splitedSearch.length && matchedIndexes.indexOf(i) == -1){
matchedIndexes.push(i);//To avoid search the same index even after match
array.push(splitedArray[i])
$(this).addClass('match');
matchedLength ++;
}
}
}
if(matchedLength < splitedSearch.length)
$(this).removeClass('match');
}
});
});// keyup
更新:1
jsfiddle
更新:2
jsfiddle
更新:3
jsfiddle
我希望这会对你有所帮助。