2

このjquery-autocompleteプラグインがあり、正確な文字列のみを検索できます。

これがデータだとしましょう。

   [
        ['apple is good'],
        ['apple grows on tree'],
        ['the tree and the apple'],
        ['red apple'],
        ['apple tree']
    ]

「アップル」を検索すると、すべてが表示されます。

ただし、「アップルツリー」と入力すると、「アップルツリー」のみが返されます。
スマートな結果(2、3、5)を返すようにしたい。

  • 「リンゴは木に生える」
  • 「木とりんご」
  • "リンゴの木"

つまり、各単語の検索を再評価する必要があります(ただし、既にフィルタリングされた結果からフィルタリングします)。

このプラグインを使用すると、独自の検索を提供できます。

スマートに検索できるようにする洗練された検索はどのように見えるでしょうか?

空白を無視し、検索クエリを単語に分割して、各単語を次々に評価する必要があります...

$("#textInputEle").autocomplete({
    url:"path/to/data.json",
    filter: function(result, filter) {
     //whats should this function be?
    }
});
4

2 に答える 2

1

このオプションを使用してfilter、独自のフィルタリングロジックを提供します。

指定する関数resultfilterパラメーター。filterパラメータは、ユーザーが検索したものです。resultパラメータは、提案リストの項目です。関数はtrue(提案が一致する場合)、またはfalse(提案が一致しない場合)を返す必要があります。

達成しようとしていることを実行するためのロジックは、次のようになります。

  1. スペース( )で渡されたものを用語の配列に分割しresultます。" "
  2. 用語の配列内の各文字列から正規表現を作成します
  3. ユーザーが入力した内容が各正規表現と一致することを確認してください

これは次のようになります。

$("#auto").autocomplete({
    data: [
        ['apple is good'],
        ['apple grows on tree'],
        ['the tree and the apple'],
        ['red apple'],
        ['apple tree']
        ],
    filter: function(result, filter) {
        var terms = filter.split(" "),
            match = true,
            i = 0,
            regex;

        for (; match && i < terms.length; i++) {
            regex = new RegExp(terms[i]);
            match = match && regex.test(result.value);
        }

        return match;
    }
});

例: http: //jsfiddle.net/ztkX2/1/

于 2012-12-26T16:03:48.407 に答える
1

jqueryオートコンプリートのすぐに使用できる機能は、「アップルツリー」というフレーズを含む結果のみを返すと思います。したがって、例から#5が返されますが、「彼はリンゴの木の近くに住んでいます」や「リンゴの木は彼女の庭で最大です」などのフレーズにも当てはまります。

于 2012-12-26T15:18:59.680 に答える