0

jqueryuiオートコンプリートが適用されるクライアント側でxmlレコードをプリロードしました。「車、自転車、飛行機」 のようなレコードがあるとします。

現在(jquery ui autocompleteを使用している間)ユーザーが「car、bike」と入力すると、上記のレコードが見つかります。
ただし、ユーザーが次のように入力した場合:「カーバイク」コンマの代わりに空白を意味します)->結果は表示されません。

「カーバイク」を指定された「カンマ」区切りのレコードと一致させる方法は?

4

2 に答える 2

1

2つの配列を分割して、一方をループし、もう一方の配列でループされたアイテムのインデックスを検索できると思います。

<script type="text/javascript">

    var str="car,bike,plane";
    var strToSearch= "car bike";


    var splitted = str.split(",");
    var strToSearchSplitted = strToSearch.split(' ');
    var found = false;

    for (var i in splitted){
      if (strToSearchSplitted.indexOf(splitted[i]) != -1){
        found = true;
        break;
      }
    }
<script>
于 2012-04-06T00:53:33.167 に答える
0

同じ状況に対処しているかもしれないのぞき見のために、ここに私が思いついた解決策があります、最初に簡単な説明:

  • まず、検索語(クエリ)を空白で分割します
  • 次に、分割された単語をさらにいくつかの正規表現属性と連結することにより、正規表現定義を動的に構築します。:ユーザーが「CarBike」​​を検索すると- >分割した後、次の文字列を動的に作成します:
    [ str = "Car" +(any character(s))+ "Bike" +(any character(s)) ] 、これはjavascriptRegExpに送られます。

より明確にするために、ここに私のコードがあります:(うまくいけばそれはあなたを助けるかもしれません)

$( "#field" ).autocomplete({
         source:function(request, response) {
         var query_array = request.term.toUpperCase().split(/\s+/g);//split on white space
         if(query_array.length >1)// if two ore more words, separated by whitespace
         {
           if(!/^\s*$/.test(query_array[query_array.length-1]))//if last word is not only whitespace
             {
                var new_query = '';
                for (var i=0; i<query_array.length; ++i )
                {
                   new_query+='(\\b' +query_array[i]+'\\b)';//word boundaries
                   if(i<query_array.length-1)
                   {
                     new_query+="([\\s\\S\\.]*)";// match ALL characters including newline , * is for many
                   }
                }

                 var matcher = new RegExp('^'+new_query, "g");//must Start with query term, apply regex global
                 var a = $.grep( autocomplete_data_array, function(item,index){
                               return matcher.test(item.value);
                     });

                 if(a.length>0)
                 {
                   response(a);
                 }
               }
         }
于 2012-04-11T04:49:02.567 に答える