2011-05-20 63 views
6

变音符号我用jquery.highlight插件亮点的话:http://code.google.com/p/gce-empire/source/browse/trunk/jquery.highlight.js?r=2与(和不)重音字符/ jQuery中

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

问题是,如果我搜索类似“café”它不会突出显示任何单词。

如果我搜索“咖啡馆”,即使我的结果既包含“咖啡馆” & “吃茶”,它将只强调“咖啡馆”

所以,我需要突出显示单词的所有“版本”,有或没有变音符号。

这可能吗?

+0

查看来自casablanca的答案:http://stackoverflow.com/questions/4261740/accent-insensitive-regex。基本上,围绕jquery.highlight.js的第91行进行修改,以便正则表达式现在包含字符类。可能会在第83行附近添加“accentInsensitive”选项。 – anon 2011-05-20 04:16:35

+0

谢谢,但是我对如何在代码中实现该代码感到有点遗憾... – Santiago 2011-05-20 21:28:39

+0

好的。我在下面添加了一个实现。 – anon 2011-05-21 01:23:04

回答

3

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

谢谢,这工作得很好,除了“wordsOnly:true”选项。它必须是新模式的一些问题:pattern =“\\ b”+ pattern +“\\ b”;.另外,你知道这个更完整的变音符列表应该如何在这个代码中实现吗? http://lehelk.com/2011/05/06/script-to-remove-diacritics/ – Santiago 2011-05-21 02:01:03

+0

哇。太棒了!显然,这不是一个简单的问题。检查了这一点:http://stackoverflow.com/questions/3693750/how-can-i-make-a-regular-expression-which-takes-accented-characters-into-account。在这种情况下,您可以使用XRegExp库。至于移除/规范化变音符号(这可能是我上面评论中引用的tchrist解决方案),也许你可以查看http://rishida.net/blog/?p=222。不过,这很残酷。 – anon 2011-05-21 02:46:46