如何在jquery中使我的搜索方法更好?

时间:2014-09-30 20:07:05

标签: jquery string search match

我用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

Here is a jsFiddle

1 个答案:

答案 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

我希望这会对你有所帮助。