jQuery Tablesorter 自定义过滤器具有重音字符和特殊配置的问题

问题描述

我在定义自定义过滤器时遇到问题:

  1. 有重音字符
  2. textExtraction 已定义(用于设置 data-sort-value 属性 I/O 节点文本的使用)
  3. sortLocalCompare 设置为 true

重现步骤

在名为“2”的列(我在我的应用中使用 flaticon)中,选择选项“Modéré”或“>=Modéré”

观察结果

过滤器没有找到任何结果 => 表格是空的

预期结果

它应该找到:

  • 1 行(使用选项“Moderé”时)或
  • 2 行(当使用选项“>=Moderé”时,因为“Sérieux”大于“Modéré”)

请找到具有所描述情况的 link。 当我改变任何一个时:

  1. sortLocalCompare:false
  2. 注释/删除 textExtraction 属性定义 两种情况,其中一种就足够了,让一切顺利。

当然,作为解决方法,这两个删除选项都不能让我满意。因为:

  1. 选项 1:sortLocalCompare:false 当我们按第二列“Société”排序时,公司“Bâloise”在“BVZ Holding”之后排序,这是由于“â”。
  2. 选项 2:我需要定义 textExtraction 函数,因为我设置了整数值以使逻辑与 ">=Modéré" 一起工作,或者添加多个由半列分隔的整数以处理元素的多个主题(并有一个自定义过滤器列出所有主题一次)

我试图使 the example 尽可能简短和全面。这个表可以用 3 种语言生成(我的应用程序是英语、法语、德语),过滤器应用了 CSS 类名,以便像我一样在应用程序中的多个表中使用。

这是我的通用配置的简短版本(多个表使用它):

$(function() {
  $(".tablesorter").tablesorter({
    theme: 'blue',sortLocaleCompare: true,widgets: ["filter"],textExtraction: textExtractionDataSortValue,filter_onlyAvail: 'filter-onlyAvail',widgetoptions: {
      filter_functions: {
        '.filter-controversy': filterControversy,}
    }
  });
});

自定义过滤器功能(根据用户的语言生成英语、法语或德语):

var filterControversy = {
  'Aucun': function(e,n) {  
  console.info(e + " n=" + n);
    return e == '';
  },'Modéré': function(e,n) {
  console.info(e + " n=" + n);
    return e == 101;
  },' >=Modéré': function(e,n) {
  console.info(e + " n=" + n);
    return e >= 101;
  },'Serieux': function(e,n) {
  console.info(e + " n=" + n);
    return e == 102;
  },' >=Sérieux': function(e,n) {
    return e >= 102;
  },'Sévère': function(e,n) {
    return e == 106;
  },'Majeur': function(e,n) {
  console.info(e + " n=" + n);
    return e == 103;
  },'Tous': function(e,n) {
    return e != '';
  }
}

感谢您的帮助

Tablesorter 版本:2.31.3(最新)

解决方法

因此,您对导致问题的 sortLocaleCompare 的行为是正确的。发生的事情是过滤器函数名称正在删除重音。为了解决这个问题,您需要更改函数名称以包含非重音名称(用于函数)以及重音名称(向用户显示)demo

您只需要按如下方式更改 filterControversy 对象:

var filterControversy = {
  'Aucun': function(e,n) {
    return e == '';
  },'Modere|Modéré': function(e,n) {
    return e == 101;
  },' >=Modere| >=Modéré': function(e,n) {
    return e >= 101;
  },'Serieux': function(e,n) {
    return e == 102;
  },' >=Serieux| >=Sérieux': function(e,n) {
    return e >= 102;
  },'Severe|Sévère': function(e,n) {
    return e == 106;
  },'Majeur': function(e,n) {
    return e == 103;
  },'Tous': function(e,n) {
    return e != '';
  }
};

可以使用 filter_selectSource widget option

更改 | 分隔符