选择 - 搜索重音词
chosen - search accented words
我正在使用 this plugin 来美化 select 框。它具有搜索功能,当输入时它会过滤出结果。问题是,如果我的 select 包含 á、é、í、ó、ú、ü、ñ 之类的词,插件将无法理解。例如:如果我输入 a,它应该假定我输入的是 á,因此用 a 和 á 之类的词给出结果。但事实并非如此。只给了我一个字。
所以,没有人知道如何让它理解带重音的单词吗?
您所要求的是当前项目中的功能请求:
https://github.com/harvesthq/chosen/issues/536
虽然目前还没有包含此功能的正式版本,但一些用户已经提出了您可以尝试的可行解决方案。
例如:
我通过添加以下代码解决了这个问题:
var t=t.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
到函数 t.prototype.search_string_match=function(t,e)
一个解决方案是修改 get_search_regex
(输入搜索值),然后修改 search_string_match
(循环下拉项)。
如果您只修改后者,当输入字符串中使用重音字符时,您会过滤掉匹配项。
步骤:
- 标准化
get_search_regex
中的输入 -> 在函数开头添加 t = t.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
(在缩小的 js 中搜索 t.prototype.get_search_regex=function(t){
)
- 标准化
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
分解为ff
,Ⓓ
分解为d
。因此,这比 table 能够处理的情况更多。可能有点矫枉过正,你总是可以写一个 table 来代替。
在我们规范化字符串后,我们留下了一些我们不想要的字符(在 š
的情况下我们有 ˇ
)。这是用正则表达式解决的,该正则表达式将 u0300
- u036f
(已知的变音符号)范围内的所有字符替换为任何字符 (""
).
replace(/[\u0300-\u036f]/g, "")
2021+ alternative of this would be to:
replace(/\p{Diacritic}/gu, "")
我正在使用 this plugin 来美化 select 框。它具有搜索功能,当输入时它会过滤出结果。问题是,如果我的 select 包含 á、é、í、ó、ú、ü、ñ 之类的词,插件将无法理解。例如:如果我输入 a,它应该假定我输入的是 á,因此用 a 和 á 之类的词给出结果。但事实并非如此。只给了我一个字。
所以,没有人知道如何让它理解带重音的单词吗?
您所要求的是当前项目中的功能请求:
https://github.com/harvesthq/chosen/issues/536
虽然目前还没有包含此功能的正式版本,但一些用户已经提出了您可以尝试的可行解决方案。
例如:
我通过添加以下代码解决了这个问题:
var t=t.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
到函数 t.prototype.search_string_match=function(t,e)
一个解决方案是修改 get_search_regex
(输入搜索值),然后修改 search_string_match
(循环下拉项)。
如果您只修改后者,当输入字符串中使用重音字符时,您会过滤掉匹配项。
步骤:
- 标准化
get_search_regex
中的输入 -> 在函数开头添加t = t.normalize("NFD").replace(/[\u0300-\u036f]/g, "");
(在缩小的 js 中搜索t.prototype.get_search_regex=function(t){
) - 标准化
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
分解为ff
,Ⓓ
分解为d
。因此,这比 table 能够处理的情况更多。可能有点矫枉过正,你总是可以写一个 table 来代替。
在我们规范化字符串后,我们留下了一些我们不想要的字符(在 š
的情况下我们有 ˇ
)。这是用正则表达式解决的,该正则表达式将 u0300
- u036f
(已知的变音符号)范围内的所有字符替换为任何字符 (""
).
replace(/[\u0300-\u036f]/g, "")
2021+ alternative of this would be to:
replace(/\p{Diacritic}/gu, "")