【问题标题】:Make jquery :Contains accent insensitive使 jquery :包含重音不敏感
【发布时间】:2013-01-15 17:50:52
【问题描述】:

我有这个不区分大小写的自定义选择器:

jQuery.expr[':'].Contains = function(a,i,m) {
    var text = jQuery(a).text().toUpperCase();
    var words = m[3].split(/\s+/);
    for(var i = 0; i < words.length; i++) {
        if (-1 == text.indexOf(words[i].toUpperCase())) {
          return false;
        }
    }
    return true;
};

它工作正常,但它会被口音弄乱。我的问题很简单,我怎样才能让这个选择器不区分大小写和重音

我正在考虑使用带有正则表达式的字符映射,但我似乎无法使其正常运行。

感谢您的帮助。

【问题讨论】:

    标签: jquery contains case-insensitive accent-insensitive


    【解决方案1】:

    不要使用 string.indexOf(),而是使用带有正则表达式 insensitive 选项的 string.match()。

    类似:

    if (!text.match(new RegExp(words[i],'i'))){
       return false;
    }
    

    RegExp 比较考虑了 Unicode 字符,因此重音符号将在大小写之间正确匹配。

    【讨论】:

      【解决方案2】:

      我在 Github 上找到了这个,它对我很有用: https://gist.github.com/oziks/3664787

      jQuery.expr[':'].contains = function(a, i, m) {
          var rExps=[
              {re: /[\xC0-\xC6]/g, ch: "A"},
              {re: /[\xE0-\xE6]/g, ch: "a"},
              {re: /[\xC8-\xCB]/g, ch: "E"},
              {re: /[\xE8-\xEB]/g, ch: "e"},
              {re: /[\xCC-\xCF]/g, ch: "I"},
              {re: /[\xEC-\xEF]/g, ch: "i"},
              {re: /[\xD2-\xD6]/g, ch: "O"},
              {re: /[\xF2-\xF6]/g, ch: "o"},
              {re: /[\xD9-\xDC]/g, ch: "U"},
              {re: /[\xF9-\xFC]/g, ch: "u"},
              {re: /[\xC7-\xE7]/g, ch: "c"},
              {re: /[\xD1]/g, ch: "N"},
              {re: /[\xF1]/g, ch: "n"}
          ];
      
          var element = $(a).text();
          var search = m[3];
      
          $.each(rExps, function() {
              element = element.replace(this.re, this.ch);
              search = search.replace(this.re, this.ch);
          });
      
          return element.toUpperCase()
          .indexOf(search.toUpperCase()) >= 0;
      };
      

      【讨论】:

        猜你喜欢
        • 2021-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-13
        • 2015-09-28
        • 2013-01-21
        • 1970-01-01
        • 2017-08-21
        相关资源
        最近更新 更多