Выделите слова с (и без) акцентированными символами / диакритическими знаками в jQuery - PullRequest
7 голосов
/ 20 мая 2011

Я использую плагин jquery.highlight: http://code.google.com/p/gce-empire/source/browse/trunk/jquery.highlight.js?r=2

Я использую его для выделения результатов поиска.

Проблема в том, что если я ищу что-то вроде "café" не будет выделять слова.

И если я найду "cafe" , хотя мои результаты содержат оба "cafe" & «кафе» , оно будет только выделять «кафе» .

Итак, мне нужно выделить все «версии» слов, с диакритическими знаками или без них.

Возможно ли это?

Ответы [ 2 ]

4 голосов
/ 21 мая 2011

http://jsfiddle.net/nHGU6/

Тест HTML:

<div id="wrapper-accent-sensitive">
 <p>cafe</p>
 <p>asdf</p>
 <p>café</p>
</div>
<hr />
<div id="wrapper-not-accent-sensitive">>
 <p>cafe</p>
 <p>asdf</p>
 <p>café</p>
</div>

Тест CSS:

.yellow {
    background-color: #ffff00;
}

Замена Javascript:

jQuery.fn.highlight = function (words, options) {
    var accentedForms = {
        'c': 'ç',
        'e': 'é'
    };

    var settings = { className: 'highlight', element: 'span', caseSensitive: false, wordsOnly: false, accentInsensitive: false };
    jQuery.extend(settings, options);

    if (settings.accentInsensitive) {
        for (var s in accentedForms) {
            words = words.replace(s, '[' + s + accentedForms[s] + ']');
        }
    }

    if (words.constructor === String) {
        words = [words];
    }

    var flag = settings.caseSensitive ? "" : "i";
    var pattern = "(" + words.join("|") + ")";
    if (settings.wordsOnly) {
        pattern = "\\b" + pattern + "\\b";
    }
    var re = new RegExp(pattern, flag);

    return this.each(function () {
        jQuery.highlight(this, re, settings.element, settings.className);
    });
};

Тестовый код:

$(document).ready(function() {
    $("#wrapper-accent-sensitive").highlight("cafe", { className: 'yellow' });
    $("#wrapper-not-accent-sensitive").highlight("cafe", { className: 'yellow', accentInsensitive: true });
});
0 голосов
/ 27 сентября 2018

Я могу порекомендовать хорошую библиотеку, которая поддерживает это из коробки: highlight.js . Хотя он предназначен для подсветки синтаксиса для блоков кода, вы также можете выделить другие (ключевые) слова, определив синтаксическую грамматику в соответствии с языком.

Установка опции lexemes : '[äöüÄÖÜßa-zA-Z]+' в спецификации языка включит ключевые слова с немецкими специальными символами, например.

...