在jQuery中突出显示带有(和没有)重音字符/变音符号的单词

时间:2011-05-20 04:02:45

标签: jquery highlight diacritics non-ascii-characters

我正在使用jquery.highlight插件:http://code.google.com/p/gce-empire/source/browse/trunk/jquery.highlight.js?r=2

我正在使用它来突出显示搜索结果。

问题在于,如果我搜索“café”之类的内容,则不会突出显示任何字词。

如果我搜索“cafe”,即使我的搜索结果包含“cafe”& “café”仅突出显示“咖啡馆”

因此,无论是否有变音符号,我都需要突出显示所有单词的“版本”。

这可能吗?

2 个答案:

答案 0 :(得分:4)

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 });
});

答案 1 :(得分:0)

我可以建议一个好的库来立即支持: highlight.js 。虽然它旨在对代码块进行语法高亮显示,但您也可以通过定义相应的语言语法来高亮显示其他(关键字)单词。

在您的语言规范中设置lexemes : '[äöüÄÖÜßa-zA-Z]+'的选项将启用带有德语特殊字符的关键字。