【发布时间】:2015-08-12 08:41:57
【问题描述】:
我正在使用this plugin 来美化选择框。它具有搜索功能,输入时会过滤掉结果。问题是,如果我的选择有 á, é, í, ó, ú, ü, ñ 之类的词,插件将无法理解。例如:如果我输入 a,它应该假设我在输入 á,因此用 a 和 á 之类的词给出结果。但它没有。只给了我一个字。
那么,没有人知道如何让它理解带重音的单词吗?
【问题讨论】:
标签: javascript jquery jquery-chosen
我正在使用this plugin 来美化选择框。它具有搜索功能,输入时会过滤掉结果。问题是,如果我的选择有 á, é, í, ó, ú, ü, ñ 之类的词,插件将无法理解。例如:如果我输入 a,它应该假设我在输入 á,因此用 a 和 á 之类的词给出结果。但它没有。只给了我一个字。
那么,没有人知道如何让它理解带重音的单词吗?
【问题讨论】:
标签: javascript jquery jquery-chosen
您要求的是当前项目中的功能请求:
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, "");t.prototype.get_search_regex=function(t){)
search_string_match 中的下拉项 -> 在函数开头添加t = t.normalize("NFD").replace(/[\u0300-\u036f]/g, "");t.prototype.search_string_match=function(t,e))
解释:
normalize("NFD")
根据 unicode 规范化形式规范化字符串。 NFD 代表 Canonical Decomposition,它“分解” unicode 字符。例如,š 分解为 ˇ + s,ff 分解为 ff,Ⓓ 分解为 d。因此,它能够处理的案例比一个表格要多得多。可能有点矫枉过正,您可以随时组成一个表格。
在我们对字符串进行规范化后,我们会留下一些我们不想要的字符(例如š 我们有ˇ)。这可以通过正则表达式解决,该表达式将u0300 - u036f(已知的变音符号)范围内的所有字符替换为空("")。
replace(/[\u0300-\u036f]/g, "")
2021+ alternative of this would be to:
replace(/\p{Diacritic}/gu, "")
【讨论】: