5

jQueryオートコンプリートプラグインを使用していますが、結果の強調表示に問題があります。一致するものが見つかったが、入力されたキーワードにスペースが含まれている場合、強調表示はありません。例:

search = "foo"、result = "foo bar"、displayed = " foo bar"

search = "foo ba"、result = "foo bar"、displayed = "foo bar"

そのため、オートコンプリート関数のハイライトオプションを使用してこれを修正しようとしています。このオプションでは、関数を使用して、結果に対してカスタム処理を実行できます。現在私はこれを持っています:

$('.autocomplete').autocomplete('getmatch.php', {
    highlight: function(match, keywords) {
        keywords = keywords.split(' ').join('|');
        return match.replace(/(get|keywords|here)/gi,'<b>$1</b>');
    }
});

replace関数は、文字列内の一致するすべての単語を太字のバージョンに置き換えます。これは機能します。ただし、キーワードをその関数に組み込む方法がわかりません。私はそれらを分割してから「|」で結合するので、「foobar」は「foo|bar」のようになります。しかし、このようなものは機能していないようです:

return match.replace(/(keywords)/gi,'<b>$1</b>'); // seen as text, I think

return match.replace('/'+(keywords)+'/gi','<b>$1</b>'); // nothing either

何か案は?

4

3 に答える 3

11

RegExpコンストラクターを使用して、文字列からRegExpオブジェクトを作成します。

$('.autocomplete').autocomplete('getmatch.php', {
    highlight: function(match, keywords) {
        keywords = keywords.split(' ').join('|');
        return match.replace(new RegExp("("+keywords+")", "gi"),'<b>$1</b>');
    }
});
于 2009-06-05T17:56:19.973 に答える
1

上記は単純化されており、用語内の正規表現の特殊文字を処理しないため、最初のオートコンプリートの実装を微調整しました。

function doTheHighlight(value, term) {
    // Escape any regexy type characters so they don't bugger up the other reg ex
    term = term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1");

    // Join the terms with a pipe as an 'OR'
    term = term.split(' ').join('|');

    return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
}
于 2009-09-28T14:19:42.743 に答える
0

関数は次のシグネチャを使用する必要があります: function(value, term)。値と用語はオートコンプリート プラグインによって入力され、必要な値が含まれます。

于 2009-06-05T18:04:59.850 に答える