【问题标题】:jQuery DataTables - Accent-Insensitive Alphabetization and SearchingjQuery DataTables - 不区分重音的字母排序和搜索
【发布时间】:2014-03-17 00:21:26
【问题描述】:

当使用jQuery DataTables 时,是否可以在使用过滤器时进行不区分重音的搜索?例如,当我输入 'e' 字符时,我想用 'e' 或 'é'、'è' 搜索每个单词。

想到的是将字符串标准化并将它们放入单独的隐藏列中,但这并不能解决字母排序问题。

编辑

我尝试了以下方法:

$.fn.dataTableExt.ofnSearch = function ( data ) {
return ! data ?
    '' :
    typeof data === 'string' ?
        data
            .replace( /\n/g, ' ' )
            .replace( /á/g, 'a' )
            .replace( /é/g, 'e' )
            .replace( /í/g, 'i' )
            .replace( /ó/g, 'o' )
            .replace( /ú/g, 'u' )
            .replace( /ê/g, 'e' )
            .replace( /î/g, 'i' )
            .replace( /ô/g, 'o' )
            .replace( /è/g, 'e' )
            .replace( /ï/g, 'i' )
            .replace( /ü/g, 'u' )
            .replace( /ç/g, 'c' ) :
        data;
};

JS File Gist

【问题讨论】:

    标签: javascript jquery jquery-datatables non-ascii-characters accent-insensitive


    【解决方案1】:

    我的问题与不带重音的搜索相同,但要找到带重音的答案,例如使用咖啡厅搜索并使用咖啡厅显示结果

    我不使用表格而是使用 div,而且我不知道如何将解决方案适应我的网站。

    这是我的搜索代码

        $(document).ready(function(){
      $("#myInput").on("keyup", function() {
        var value = $(this).val().toLowerCase();
        $("#myDIV div").filter(function() {
          $(this).toggle($(this).text().toLowerCase().indexOf(value) > -1)
        });
      });
    });
    

    感谢您的帮助

    【讨论】:

      【解决方案2】:

      关于列过滤的其他反馈:上面的 cmets 仅在要过滤的列是“字符串”类型(定义的 DataTables 列类型here)时才有效。

      如果列包含 HTML 标记,DataTables 库会自动将其标记为“html”类型,并触发该类型的相关搜索回调。因此,要正确应用过滤,需要在“html”类型上注册回调:

      $.fn.DataTable.ext.type.search['html'] = function(data) {
        return unaccent(data);
      };
      

      其中 unaccent 是一个从输入字符串中删除重音符号/变音符号/奇怪字符的函数。

      【讨论】:

        【解决方案3】:

        我认为 Jean-Sébastien 的解决方案(抱歉,我还不能评论)是唯一真正回答问题的解决方案。如果您键入“Explorer”或“éexplorer”,它应该返回“Explorer”和“éexplorer”。在之前的建议中,如果键入“éexplorer”,搜索将不会返回任何内容。

        诀窍在于他的解决方案遗漏了 keyup 函数的一部分。

        $('#example_filter input[type=search]').keyup(function () {
            var table = $('#example').DataTable();
            table.search(
            $.fn.DataTable.ext.type.search.string(accents_supr(this.value))
            ).draw();
        });
        

        查看这个 fiddle fork 的工作演示。 http://jsfiddle.net/syvo/caxj9koL/

        【讨论】:

        • 只是不要忘记将函数中的字符串小写以处理案例
        【解决方案4】:

        jQuery v: 2.1.0
        jquery.dataTables.min.js v: 1.10.7
        dataTables.responsive.min.js v:1.0.6

        我从这里使用了重音中和插件(感谢 Allan Jardine):
        http://www.datatables.net/plug-ins/filtering/type-based/accent-neutralise

        只是为了我的目的做了最小的调整:

        我做了一个例子,结合了http://jsfiddle.net/xebtyaeL/5/中的答案

        jQuery.fn.DataTable.ext.type.search.string = function ( data ) {
            return ! data ?
                '' :
                typeof data === 'string' ?
                    data
                        .replace( /έ/g, 'ε')
                        .replace( /ύ/g, 'υ')
                        .replace( /ό/g, 'ο')
                        .replace( /ώ/g, 'ω')
                        .replace( /ά/g, 'α')
                        .replace( /ί/g, 'ι')
                        .replace( /ή/g, 'η')
                        .replace( /\n/g, ' ' )
                        .replace( /[áÁ]/g, 'a' )
                        .replace( /[éÉ]/g, 'e' )
                        .replace( /[íÍ]/g, 'i' )
                        .replace( /[óÓ]/g, 'o' )
                        .replace( /[úÚ]/g, 'u' )
                        .replace( /ê/g, 'e' )
                        .replace( /î/g, 'i' )
                        .replace( /ô/g, 'o' )
                        .replace( /è/g, 'e' )
                        .replace( /ï/g, 'i' )
                        .replace( /ü/g, 'u' )
                        .replace( /ã/g, 'a' )
                        .replace( /õ/g, 'o' )
                        .replace( /ç/g, 'c' )
                        .replace( /ì/g, 'i' ) :
                    data;
        };
        
        var tabla = jQuery('#datatable-table').dataTable( { } );
                  new jQuery.fn.dataTable.Responsive( tabla );
        
        jQuery(document).ready(function() {
              var table = jQuery('#datatable-table').DataTable();
        
              // Remove accented character from search input as well
              jQuery('#datatable-table_filter input').keyup( function () {
                table
                  .search(
                    jQuery.fn.DataTable.ext.type.search.string( this.value )
                  )
                  .draw();
              } );
        } );
        

        【讨论】:

          【解决方案5】:

          对于未来的读者,

          使用重音中性只能解决以不区分大小写的方式进行搜索的部分问题。该插件仅将一些重音字符替换为表格内的非重音字符。您还需要从搜索文本框输入中删除重音符号。

          我遇到的另一个问题是该插件只替换小写字母,因此我继续为法语中最常见的重音字母添加了一些额外的映射,基于另一个很好的解决方案: Remove accents/diacritics in a string in JavaScript

          accent-neutralise-french.js

          function accents_supr(data){
          return !data ?
              '' :
              typeof data === 'string' ?
                  data
                      .replace(/\n/g, ' ')
                      .replace(/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g, 'a')
                      .replace(/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g, 'e')
                      .replace(/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g, 'i')
                      .replace(/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g, 'o')
                      .replace(/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g, 'u')
                      .replace(/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g, 'A')
                      .replace(/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g, 'E')
                      .replace(/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g, 'I')
                      .replace(/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g, 'O')
                      .replace(/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g, 'U')
                      .replace(/ç/g, 'c')
                      .replace(/Ç/g, 'C') :
                  data;
          };
          
          jQuery.fn.DataTable.ext.type.search['string'] = function(data) {
              return accents_supr(data);
          };
          

          在带有数据表的页面中:

           // Remove accented character from search input as well
              $('#dt_basic_filter input[type=search]').keyup( function () {
                  var table = $('#dt_basic').DataTable(); 
                  table.search(
                      jQuery.fn.DataTable.ext.type.search.string(this.value)
                  ).draw();
              } );
          

          【讨论】:

            【解决方案6】:

            您的编辑如此非常接近,您已经尝试过,除了您缺少必须重要的东西:定义过滤器插件的“范围”或 sType .该函数永远不会被调用,对吧?这是因为插件没有与sType 关联。

            要让您的代码正常工作,只需像这样声明插件:

            $.fn.dataTableExt.ofnSearch['string'] = function ( data ) {
            return ! data ?
                '' :
                typeof data === 'string' ?
            ..
            ..
            }
            

            看到这个小提琴 -> http://jsfiddle.net/Y5ycM/ 我已经将一些“Internet Explorer”列变成了“Internet éexplorer”,一些“Opera”变成了“öpera”等,尝试搜索ex 或op.


            参见https://datatables.net/development/filtering,“基于类型的列过滤”部分 " :

            当您为列分配 sType 时(或自动分配 由 DataTables 或类型检测插件为您检测),您将 通常将其用于自定义排序,但它也可用于 提供自定义过滤选项。 这是通过添加函数来完成的 parameter name 与 sType 匹配的对象 目标列:

            我猜这里的文档中有错字或疏忽,它说

            $.fn.dataTableExt.ofnSearch 但应该正确地是$.fn.dataTableExt.ofnSearch[sType],正如后面的例子清楚地指出的那样。


            更新。 Allan Jardine 确认这是 1.9.4 here 中的一个错误:

            是的 - 1.9.4 中的错误。不幸的是,1.9.4 破坏了这部分代码。 它还影响从过滤器中删除 HTML 标记,因为 使用相同的机制。不过,它在 1.10 测试版中已修复。

            【讨论】:

            • Sigh 还是没明白。这是我实际的 js 文件的要点。我一定遗漏了一些东西,但似乎仍然没有调用该函数。 gist.github.com/hanleyhansen/17f8ead5bec5273c07fe
            • @hanleyhansen - 好吧,现在我是一个没有得到它的人:) 在删除所有以前的 javascript 之后,只需将您的代码复制到上面的小提琴中(唯一被重用的是表标记本身) - jsfiddle.net/Y5ycM/3,它工作正常。在 chrome、FF 和 Opera 中测试。现在无法切换到 Windows 框。我唯一注释掉的是您在最后使用所选插件,因为它不包含在这个小提琴中。
            • 我想知道,您是否使用真的旧版本的dataTables?小提琴中使用的是v1.9.0
            • 这真的很奇怪。我正在使用 v1.9.4。
            • @hanleyhansen,你是绝对对!!??见jsfiddle.net/ua6Rt。 1.9.4 中完全破坏了预期的行为。即使您强制 sType 为字符串。更奇怪的是,看看core.filter.js,_fnDataToSearch - 它明确地转到if ( typeof DataTable.ext.ofnSearch[sType] === "function" )..,但从未被调用!我怀疑您在 1.9.4 中发现了一个真正的错误。关于 1.9.4 中的基本过滤器操作,不应该有任何改变。我将尝试找出发生了什么,为什么从未调用过ofnSearch。错误或未记录的更改。
            【解决方案7】:
            // (Long) list of all accented characters and their folded equivalents
            var accent_map = {
            '\n':' ','ẚ':'a','Á':'a','á':'a','À':'a','à':'a','Ă':'a','ă':'a','Ắ':'a','ắ':'a','Ằ':'a','ằ':'a','Ẵ':'a','ẵ':'a','Ẳ':'a','ẳ':'a','Â':'a','â':'a','Ấ':'a','ấ':'a','Ầ':'a','ầ':'a','Ẫ':'a','ẫ':'a','Ẩ':'a','ẩ':'a','Ǎ':'a','ǎ':'a','Å':'a','å':'a','Ǻ':'a','ǻ':'a','Ä':'a','ä':'a','Ǟ':'a','ǟ':'a','Ã':'a','ã':'a','Ȧ':'a','ȧ':'a','Ǡ':'a','ǡ':'a','Ą':'a','ą':'a','Ā':'a','ā':'a','Ả':'a','ả':'a','Ȁ':'a','ȁ':'a','Ȃ':'a','ȃ':'a','Ạ':'a','ạ':'a','Ặ':'a','ặ':'a','Ậ':'a','ậ':'a','Ḁ':'a','ḁ':'a','Ⱥ':'a','ⱥ':'a','Ǽ':'a','ǽ':'a','Ǣ':'a','ǣ':'a','Ḃ':'b','ḃ':'b','Ḅ':'b','ḅ':'b','Ḇ':'b','ḇ':'b','Ƀ':'b','ƀ':'b','ᵬ':'b','Ɓ':'b','ɓ':'b','Ƃ':'b','ƃ':'b','Ć':'c','ć':'c','Ĉ':'c','ĉ':'c','Č':'c','č':'c','Ċ':'c','ċ':'c','Ç':'c','ç':'c','Ḉ':'c','ḉ':'c','Ȼ':'c','ȼ':'c','Ƈ':'c','ƈ':'c','ɕ':'c','Ď':'d','ď':'d','Ḋ':'d','ḋ':'d','Ḑ':'d','ḑ':'d','Ḍ':'d','ḍ':'d','Ḓ':'d','ḓ':'d','Ḏ':'d','ḏ':'d','Đ':'d','đ':'d','ᵭ':'d','Ɖ':'d','ɖ':'d','Ɗ':'d','ɗ':'d','Ƌ':'d','ƌ':'d','ȡ':'d','ð':'d','É':'e','Ə':'e','Ǝ':'e','ǝ':'e','é':'e','È':'e','è':'e','Ĕ':'e','ĕ':'e','Ê':'e','ê':'e','Ế':'e','ế':'e','Ề':'e','ề':'e','Ễ':'e','ễ':'e','Ể':'e','ể':'e','Ě':'e','ě':'e','Ë':'e','ë':'e','Ẽ':'e','ẽ':'e','Ė':'e','ė':'e','Ȩ':'e','ȩ':'e','Ḝ':'e','ḝ':'e','Ę':'e','ę':'e','Ē':'e','ē':'e','Ḗ':'e','ḗ':'e','Ḕ':'e','ḕ':'e','Ẻ':'e','ẻ':'e','Ȅ':'e','ȅ':'e','Ȇ':'e','ȇ':'e','Ẹ':'e','ẹ':'e','Ệ':'e','ệ':'e','Ḙ':'e','ḙ':'e','Ḛ':'e','ḛ':'e','Ɇ':'e','ɇ':'e','ɚ':'e','ɝ':'e','Ḟ':'f','ḟ':'f','ᵮ':'f','Ƒ':'f','ƒ':'f','Ǵ':'g','ǵ':'g','Ğ':'g','ğ':'g','Ĝ':'g','ĝ':'g','Ǧ':'g','ǧ':'g','Ġ':'g','ġ':'g','Ģ':'g','ģ':'g','Ḡ':'g','ḡ':'g','Ǥ':'g','ǥ':'g','Ɠ':'g','ɠ':'g','Ĥ':'h','ĥ':'h','Ȟ':'h','ȟ':'h','Ḧ':'h','ḧ':'h','Ḣ':'h','ḣ':'h','Ḩ':'h','ḩ':'h','Ḥ':'h','ḥ':'h','Ḫ':'h','ḫ':'h','H':'h','̱':'h','ẖ':'h','Ħ':'h','ħ':'h','Ⱨ':'h','ⱨ':'h','Í':'i','í':'i','Ì':'i','ì':'i','Ĭ':'i','ĭ':'i','Î':'i','î':'i','Ǐ':'i','ǐ':'i','Ï':'i','ï':'i','Ḯ':'i','ḯ':'i','Ĩ':'i','ĩ':'i','İ':'i','i':'i','Į':'i','į':'i','Ī':'i','ī':'i','Ỉ':'i','ỉ':'i','Ȉ':'i','ȉ':'i','Ȋ':'i','ȋ':'i','Ị':'i','ị':'i','Ḭ':'i','ḭ':'i','I':'i','ı':'i','Ɨ':'i','ɨ':'i','Ĵ':'j','ĵ':'j','J':'j','̌':'j','ǰ':'j','ȷ':'j','Ɉ':'j','ɉ':'j','ʝ':'j','ɟ':'j','ʄ':'j','Ḱ':'k','ḱ':'k','Ǩ':'k','ǩ':'k','Ķ':'k','ķ':'k','Ḳ':'k','ḳ':'k','Ḵ':'k','ḵ':'k','Ƙ':'k','ƙ':'k','Ⱪ':'k','ⱪ':'k','Ĺ':'a','ĺ':'l','Ľ':'l','ľ':'l','Ļ':'l','ļ':'l','Ḷ':'l','ḷ':'l','Ḹ':'l','ḹ':'l','Ḽ':'l','ḽ':'l','Ḻ':'l','ḻ':'l','Ł':'l','ł':'l','Ł':'l','̣':'l','ł':'l','̣':'l','Ŀ':'l','ŀ':'l','Ƚ':'l','ƚ':'l','Ⱡ':'l','ⱡ':'l','Ɫ':'l','ɫ':'l','ɬ':'l','ɭ':'l','ȴ':'l','Ḿ':'m','ḿ':'m','Ṁ':'m','ṁ':'m','Ṃ':'m','ṃ':'m','ɱ':'m','Ń':'n','ń':'n','Ǹ':'n','ǹ':'n','Ň':'n','ň':'n','Ñ':'n','ñ':'n','Ṅ':'n','ṅ':'n','Ņ':'n','ņ':'n','Ṇ':'n','ṇ':'n','Ṋ':'n','ṋ':'n','Ṉ':'n','ṉ':'n','Ɲ':'n','ɲ':'n','Ƞ':'n','ƞ':'n','ɳ':'n','ȵ':'n','N':'n','̈':'n','n':'n','̈':'n','Ó':'o','ó':'o','Ò':'o','ò':'o','Ŏ':'o','ŏ':'o','Ô':'o','ô':'o','Ố':'o','ố':'o','Ồ':'o','ồ':'o','Ỗ':'o','ỗ':'o','Ổ':'o','ổ':'o','Ǒ':'o','ǒ':'o','Ö':'o','ö':'o','Ȫ':'o','ȫ':'o','Ő':'o','ő':'o','Õ':'o','õ':'o','Ṍ':'o','ṍ':'o','Ṏ':'o','ṏ':'o','Ȭ':'o','ȭ':'o','Ȯ':'o','ȯ':'o','Ȱ':'o','ȱ':'o','Ø':'o','ø':'o','Ǿ':'o','ǿ':'o','Ǫ':'o','ǫ':'o','Ǭ':'o','ǭ':'o','Ō':'o','ō':'o','Ṓ':'o','ṓ':'o','Ṑ':'o','ṑ':'o','Ỏ':'o','ỏ':'o','Ȍ':'o','ȍ':'o','Ȏ':'o','ȏ':'o','Ơ':'o','ơ':'o','Ớ':'o','ớ':'o','Ờ':'o','ờ':'o','Ỡ':'o','ỡ':'o','Ở':'o','ở':'o','Ợ':'o','ợ':'o','Ọ':'o','ọ':'o','Ộ':'o','ộ':'o','Ɵ':'o','ɵ':'o','Ṕ':'p','ṕ':'p','Ṗ':'p','ṗ':'p','Ᵽ':'p','Ƥ':'p','ƥ':'p','P':'p','̃':'p','p':'p','̃':'p','ʠ':'q','Ɋ':'q','ɋ':'q','Ŕ':'r','ŕ':'r','Ř':'r','ř':'r','Ṙ':'r','ṙ':'r','Ŗ':'r','ŗ':'r','Ȑ':'r','ȑ':'r','Ȓ':'r','ȓ':'r','Ṛ':'r','ṛ':'r','Ṝ':'r','ṝ':'r','Ṟ':'r','ṟ':'r','Ɍ':'r','ɍ':'r','ᵲ':'r','ɼ':'r','Ɽ':'r','ɽ':'r','ɾ':'r','ᵳ':'r','ß':'s','Ś':'s','ś':'s','Ṥ':'s','ṥ':'s','Ŝ':'s','ŝ':'s','Š':'s','š':'s','Ṧ':'s','ṧ':'s','Ṡ':'s','ṡ':'s','ẛ':'s','Ş':'s','ş':'s','Ṣ':'s','ṣ':'s','Ṩ':'s','ṩ':'s','Ș':'s','ș':'s','ʂ':'s','S':'s','̩':'s','s':'s','̩':'s','Þ':'t','þ':'t','Ť':'t','ť':'t','T':'t','̈':'t','ẗ':'t','Ṫ':'t','ṫ':'t','Ţ':'t','ţ':'t','Ṭ':'t','ṭ':'t','Ț':'t','ț':'t','Ṱ':'t','ṱ':'t','Ṯ':'t','ṯ':'t','Ŧ':'t','ŧ':'t','Ⱦ':'t','ⱦ':'t','ᵵ':'t','ƫ':'t','Ƭ':'t','ƭ':'t','Ʈ':'t','ʈ':'t','ȶ':'t','Ú':'u','ú':'u','Ù':'u','ù':'u','Ŭ':'u','ŭ':'u','Û':'u','û':'u','Ǔ':'u','ǔ':'u','Ů':'u','ů':'u','Ü':'u','ü':'u','Ǘ':'u','ǘ':'u','Ǜ':'u','ǜ':'u','Ǚ':'u','ǚ':'u','Ǖ':'u','ǖ':'u','Ű':'u','ű':'u','Ũ':'u','ũ':'u','Ṹ':'u','ṹ':'u','Ų':'u','ų':'u','Ū':'u','ū':'u','Ṻ':'u','ṻ':'u','Ủ':'u','ủ':'u','Ȕ':'u','ȕ':'u','Ȗ':'u','ȗ':'u','Ư':'u','ư':'u','Ứ':'u','ứ':'u','Ừ':'u','ừ':'u','Ữ':'u','ữ':'u','Ử':'u','ử':'u','Ự':'u','ự':'u','Ụ':'u','ụ':'u','Ṳ':'u','ṳ':'u','Ṷ':'u','ṷ':'u','Ṵ':'u','ṵ':'u','Ʉ':'u','ʉ':'u','Ṽ':'v','ṽ':'v','Ṿ':'v','ṿ':'v','Ʋ':'v','ʋ':'v','Ẃ':'w','ẃ':'w','Ẁ':'w','ẁ':'w','Ŵ':'w','ŵ':'w','W':'w','̊':'w','ẘ':'w','Ẅ':'w','ẅ':'w','Ẇ':'w','ẇ':'w','Ẉ':'w','ẉ':'w','Ẍ':'x','ẍ':'x','Ẋ':'x','ẋ':'x','Ý':'y','ý':'y','Ỳ':'y','ỳ':'y','Ŷ':'y','ŷ':'y','Y':'y','̊':'y','ẙ':'y','Ÿ':'y','ÿ':'y','Ỹ':'y','ỹ':'y','Ẏ':'y','ẏ':'y','Ȳ':'y','ȳ':'y','Ỷ':'y','ỷ':'y','Ỵ':'y','ỵ':'y','ʏ':'y','Ɏ':'y','ɏ':'y','Ƴ':'y','ƴ':'y','Ź':'z','ź':'z','Ẑ':'z','ẑ':'z','Ž':'z','ž':'z','Ż':'z','ż':'z','Ẓ':'z','ẓ':'z','Ẕ':'z','ẕ':'z','Ƶ':'z','ƶ':'z','Ȥ':'z','ȥ':'z','ʐ':'z','ʑ':'z','Ⱬ':'z','ⱬ':'z','Ǯ':'z','ǯ':'z','ƺ':'z','2':'2','6':'6','B':'B','F':'F','J':'J','N':'N','R':'R','V':'V','Z':'Z','b':'b','f':'f','j':'j','n':'n','r':'r','v':'v','z':'z','1':'1','5':'5','9':'9','A':'A','E':'E','I':'I','M':'M','Q':'Q','U':'U','Y':'Y','a':'a','e':'e','i':'i','m':'m','q':'q','u':'u','y':'y','0':'0','4':'4','8':'8','D':'D','H':'H','L':'L','P':'P','T':'T','X':'X','d':'d','h':'h','l':'l','p':'p','t':'t','x':'x','3':'3','7':'7','C':'C','G':'G','K':'K','O':'O','S':'S','W':'W','c':'c','g':'g','k':'k','o':'o','s':'s','w':'w'
            };
            
            function accent_fold (s) {
                if (!s) { return ''; }
            
                var ret = '';
                for (var i = 0; i < s.length; i++) {
                    ret += accent_map[s.charAt(i)] || s.charAt(i);
                }
                return ret;
            };
            
            $.fn.dataTableExt.ofnSearch = function (data) {
                return accent_fold(data);
            };
            

            我修改了您问题的原始代码以使用accent-folding function (available on Github)。您可能还对the original article from "A List Apart" 感兴趣。

            【讨论】:

              【解决方案8】:

              在这个topic 解释这个问题,诀窍是用普通字符(没有重音字符)替换奇怪的字符。可以这么说。

              $.fn.DataTable.ext.type.search.string = function ( data ) {
                  return ! data ?
                      '' :
                      typeof data === 'string' ?
                          data
                              .replace( /\n/g, " " )
                              .replace( /[éêè]/g, 'e' ) :   //<------- remplace éêè by e
                          data;
              }
              

              还有一个example

              jQuery.fn.DataTable.ext.type.search.string = function ( data ) {
                  return ! data ?
                      '' :
                      typeof data === 'string' ?
                          data
                              .replace( /\n/g, ' ' )
                              .replace( /á/g, 'a' )
                              .replace( /é/g, 'e' )
                              .replace( /í/g, 'i' )
                              .replace( /ó/g, 'o' )
                              .replace( /ú/g, 'u' )
                              .replace( /ê/g, 'e' )
                              .replace( /î/g, 'i' )
                              .replace( /ô/g, 'o' )
                              .replace( /è/g, 'e' )
                              .replace( /ï/g, 'i' )
                              .replace( /ü/g, 'u' )
                              .replace( /ç/g, 'c' ) :
                          data;
              };
              

              【讨论】:

              • 字母顺序呢?现在é 被放在z 之后。
              • 有趣。今晚我得试试。这会在显示中将é 更改为e 吗?
              • 不幸的是,这不起作用。我已经用我尝试过的功能更新了我的答案。有什么想法吗?
              猜你喜欢
              • 2016-07-29
              • 2017-12-22
              • 2012-12-10
              • 2021-08-30
              • 2021-08-09
              • 2012-12-17
              • 2015-04-22
              • 1970-01-01
              • 2013-09-14
              相关资源
              最近更新 更多