繁体   English   中英

使用Chosen.js搜索国际字符

[英]Searching through international characters with Chosen.js

有没有人找到使用selected.js搜索国际字符的修复程序?

例如,如果我有一个带有以下选项的多选字段:-法国城堡-英国城堡

然后我搜索“ Cha”

只有英语会出现。

我不知道,现在回答还为时不晚,但是可能会对其他人有所帮助。

关键是要在比较期间从输入的字符串和匹配的选项字符串中删除变音符号。 我的修改适用于从github下载的版本1.1.0的jquery Chosen插件。

首先,您必须具有剥离变音符号的功能(我在winnow_results()之后添加了变音符号)

// strip czech diacritics from string
AbstractChosen.prototype.strip_diacritics= function(string) {
  var 
    translationTable= [
      // input with diacritics - add your characters if necessary
      "éěÉĚřŘťŤžŽúÚůŮüÜíÍóÓáÁšŠďĎýÝčČňŇäÄĺĹľĽŕŔöÖ",
      // stripped output
      "eeEErRtTzZuUuUuUiIoOaAsSdDyYcCnNaAlLlLrRoO",
    ],
    output= '';

  // scan through whole string
  for (var i= 0; i < string.length; i++) {
    var charPosition= translationTable[0].indexOf(string[i]);
    output+= charPosition == -1 ? string[i] : translationTable[1][charPosition];
  }

  return output;
}

然后在winnow_results()函数的适当位置使用它。 引用selected.jquery.js行:

315号线

searchText = this.get_search_text();
// replace with
searchText = this.strip_diacritics(this.get_search_text());

339号线

option.search_match = this.search_string_match(option.search_text, regex);
// replace with
option.search_match = this.search_string_match(this.strip_diacritics(option.search_text), regex);

最后是第345行

startpos = option.search_text.search(zregex);
// replace with
startpos = this.strip_diacritics(option.search_text).search(zregex);

至此,您就完成了:-)。

(我想写一些“ savegame字节替换”指令来延长旧DOS游戏的寿命)

在pastebin的整个修改文件

2016年9月29日:在“选择的1.6.2”中进行的修改经测试正常。

默认情况下,看起来好像Chosen不会执行此操作-代码中没有此功能。

源代码在这里 我在下面发布了搜索功能,该功能负责检查字符。 此函数中没有任何东西可以处理类似这样的封闭字符,因此您要么必须编写它,要么向选择团队要求该功能。 这是因为,重音字符和非重音字符的核心没有相同的ASCII(或Unicode)值。 您必须具有某种类型的查找表,并解析每个字符以返回“模糊”结果。

抱歉,我没有更多帮助。 我敢肯定,如果您能找到一种方法来修改此功能,则可以使它正常工作。 同样,您需要查找表或一些用于基础代码值的东西。 祝你好运。

编辑:您可能不需要查找表-也许Regex功能具有内置的方法来执行此操作。 或者,您可以简单地匹配与您要搜索的字母相似的任何内容。

Chosen.prototype.winnow_results = function() {
      var found, option, part, parts, regex, regexAnchor, result, result_id, results, searchText, startpos, text, zregex, _i, _j, _len, _len1, _ref;
      this.no_results_clear();
      results = 0;
      searchText = this.search_field.val() === this.default_text ? "" : $('<div/>').text($.trim(this.search_field.val())).html();
      regexAnchor = this.search_contains ? "" : "^";
      regex = new RegExp(regexAnchor + searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
      zregex = new RegExp(searchText.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"), 'i');
      _ref = this.results_data;
      for (_i = 0, _len = _ref.length; _i < _len; _i++) {
        option = _ref[_i];
        if (!option.disabled && !option.empty) {
          if (option.group) {
            $('#' + option.dom_id).css('display', 'none');
          } else if (!(this.is_multiple && option.selected)) {
            found = false;
            result_id = option.dom_id;
            result = $("#" + result_id);
            if (regex.test(option.html)) {
              found = true;
              results += 1;
            } else if (this.enable_split_word_search && (option.html.indexOf(" ") >= 0 || option.html.indexOf("[") === 0)) {
              parts = option.html.replace(/\[|\]/g, "").split(" ");
              if (parts.length) {
                for (_j = 0, _len1 = parts.length; _j < _len1; _j++) {
                  part = parts[_j];
                  if (regex.test(part)) {
                    found = true;
                    results += 1;
                  }
                }
              }
            }
            if (found) {
              if (searchText.length) {
                startpos = option.html.search(zregex);
                text = option.html.substr(0, startpos + searchText.length) + '</em>' + option.html.substr(startpos + searchText.length);
                text = text.substr(0, startpos) + '<em>' + text.substr(startpos);
              } else {
                text = option.html;
              }
              result.html(text);
              this.result_activate(result);
              if (option.group_array_index != null) {
                $("#" + this.results_data[option.group_array_index].dom_id).css('display', 'list-item');
              }
            } else {
              if (this.result_highlight && result_id === this.result_highlight.attr('id')) {
                this.result_clear_highlight();
              }
              this.result_deactivate(result);
            }
          }
        }
      }
      if (results < 1 && searchText.length) {
        return this.no_results(searchText);
      } else {
        return this.winnow_results_set_highlight();
      }
    };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM