【问题标题】:chosen - search accented words选择 - 搜索重音词
【发布时间】:2015-08-12 08:41:57
【问题描述】:

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

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

【问题讨论】:

标签: javascript jquery jquery-chosen


【解决方案1】:

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

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

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

例如:

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

【讨论】:

  • 这解决了我在选择文本中出现双引号的问题!标准 selected.jquery.min.js 在双引号左侧的第 1 个字符位置出现问题。我有一个带有以下文本的选项: Robert "Bob" Smith 如果我输入 Bo,搜索字段将正确列出结果中的选项,但是当我输入 Bob 时,它从列表中消失了。我从小提琴中复制了 .js 并且缺陷消失了。非常感谢!
  • err,刚刚收到一个 JavaScript 控制台错误,提示“RegExp 太大”。呃,对于我的 ~1000 选项选择来说,这似乎不够稳定。
  • @bmunslow fiddle.jshell.net/whqb5/1 给出 404 错误。你能重新发布解决方案吗?我也面临同样的问题
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    一种解决方案是修改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。因此,它能够处理的案例比一个表格要多得多。可能有点矫枉过正,您可以随时组成一个表格。

    在我们对字符串进行规范化后,我们会留下一些我们不想要的字符(例如š 我们有ˇ)。这可以通过正则表达式解决,该表达式将u0300 - u036f(已知的变音符号)范围内的所有字符替换为空("")。

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

    2021+ alternative of this would be to:

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

    【讨论】:

      猜你喜欢
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2013-01-02
      • 2013-09-17
      • 1970-01-01
      • 2012-02-17
      • 2011-03-15
      相关资源
      最近更新 更多