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

San*_*ago 7 jquery highlight diacritics non-ascii-characters

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

我用它来突出显示搜索结果.

问题是,如果我搜索"café"这样的东西,它就不会突出显示任何单词.

如果我搜索"咖啡馆",即使我的结果包含"咖啡馆""咖啡馆",它也只会突出"咖啡馆".

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

那可能吗?

ano*_*non 4

http://jsfiddle.net/nHGU6/

\n\n

测试 HTML:

\n\n
\n<div id="wrapper-accent-sensitive">\n <p>咖啡馆</p>\n <p>asdf</p>\n <p>caf\xc3\xa9</p>\n </div>\n<hr />\n<div id="wrapper-not-accent-sensitive">>\n <p>咖啡馆</p>\n <p>asdf</p>\n < p>caf\xc3\xa9</p>\n</div>\n
\n\n

测试CSS:

\n\n
\n.yellow {\n 背景颜色: #ffff00;\n}\n
\n\n

替换 JavaScript:

\n\n
jQuery.fn.highlight = function (words, options) {\n    var accentedForms = {\n        \'c\': \'\xc3\xa7\',\n        \'e\': \'\xc3\xa9\'\n    };\n\n    var settings = { className: \'highlight\', element: \'span\', caseSensitive: false, wordsOnly: false, accentInsensitive: false };\n    jQuery.extend(settings, options);\n\n    if (settings.accentInsensitive) {\n        for (var s in accentedForms) {\n            words = words.replace(s, \'[\' + s + accentedForms[s] + \']\');\n        }\n    }\n\n    if (words.constructor === String) {\n        words = [words];\n    }\n\n    var flag = settings.caseSensitive ? "" : "i";\n    var pattern = "(" + words.join("|") + ")";\n    if (settings.wordsOnly) {\n        pattern = "\\\\b" + pattern + "\\\\b";\n    }\n    var re = new RegExp(pattern, flag);\n\n    return this.each(function () {\n        jQuery.highlight(this, re, settings.element, settings.className);\n    });\n};\n
Run Code Online (Sandbox Code Playgroud)\n\n

测试代码:

\n\n
$(document).ready(function() {\n    $("#wrapper-accent-sensitive").highlight("cafe", { className: \'yellow\' });\n    $("#wrapper-not-accent-sensitive").highlight("cafe", { className: \'yellow\', accentInsensitive: true });\n});\n
Run Code Online (Sandbox Code Playgroud)\n