选择 - 搜索重音词

chosen - search accented words

我正在使用 this plugin 来美化 select 框。它具有搜索功能,当输入时它会过滤出结果。问题是,如果我的 select 包含 á、é、í、ó、ú、ü、ñ 之类的词,插件将无法理解。例如:如果我输入 a,它应该假定我输入的是 á,因此用 a 和 á 之类的词给出结果。但事实并非如此。只给了我一个字。

所以,没有人知道如何让它理解带重音的单词吗?

您所要求的是当前项目中的功能请求:

https://github.com/harvesthq/chosen/issues/536

虽然目前还没有包含此功能的正式版本,但一些用户已经提出了您可以尝试的可行解决方案。

例如:

http://fiddle.jshell.net/whqb5/1/

我通过添加以下代码解决了这个问题:

var t=t.normalize("NFD").replace(/[\u0300-\u036f]/g, "");

到函数 t.prototype.search_string_match=function(t,e)

一个解决方案是修改 get_search_regex(输入搜索值),然后修改 search_string_match(循环下拉项)。

如果您只修改后者,当输入字符串中使用重音字符时,您会过滤掉匹配项。

步骤:

  1. 标准化 get_search_regex 中的输入 -> 在函数开头添加 t = t.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
    (在缩小的 js 中搜索 t.prototype.get_search_regex=function(t){
  2. 标准化 search_string_match 中的下拉项 -> 在函数开头添加 t = t.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
    (在缩小的 js 中搜索 t.prototype.search_string_match=function(t,e)

解释:

normalize("NFD")

根据 unicode 规范化形式规范化字符串。 NFD 代表 Canonical Decomposition,它“分解”unicode 字符。例如š分解为ˇ+s分解为ff分解为d。因此,这比 table 能够处理的情况更多。可能有点矫枉过正,你总是可以写一个 table 来代替。

在我们规范化字符串后,我们留下了一些我们不想要的字符(在 š 的情况下我们有 ˇ)。这是用正则表达式解决的,该正​​则表达式将 u0300 - u036f(已知的变音符号)范围内的所有字符替换为任何字符 ("").

replace(/[\u0300-\u036f]/g, "")

2021+ alternative of this would be to:

replace(/\p{Diacritic}/gu, "")