jQuery.tablesorter.addParser 是函数用法

jQuery.tablesorter.addParser is function usage

没有关于如何使用 is: function(s, table, cell, $cell) {} 的明确信息,因为我打算使用但是我没有从纪录片中获得全面的知识。

我有一段代码如下所示。该功能的目的是用列数据填充数组,然后在 textsorter 中使用它对数组数据进行排序。但是,当我单击第二列时,使用 addparser 的列不再正确排序。所以它与 addParser 函数有关,所以我认为我可以通过使用 is 函数来修复它。

jQuery.tablesorter.addParser({
                        id: "parser",
                        is: function(s, table, cell, $cell) {
                            console.log("s",s,"table", table,"cell", cell, "$cell",$cell)
                            // s is the text from the cell
                            // table is the current table (as a DOM element; not jQuery object)
                            // cell is the current table cell (DOM element)
                            // $cell is the current table cell (jQuery object; added v2.18.0)
                            // return false if you don't want this parser to be auto detected
                            return true;
                        },
                        parsed: true,
                        format: function(aStr) {
                            console.log("aStr", aStr)

                            if (aStr.includes(".")) {
                            array_.push(aStr);

                            } else if (aStr.includes("-")) {
                            var result2 = aStr.replace(/-/g, ".");
                            console.log("before reverse array", result2)
                            result2 = result2.split(".");
                            result2 = result2.reverse();
                            result2 = result2.join(".");
                            console.log("reversed array", result2)
                            array_.push(result2);

                            } else {
                            array_.push(aStr);
                            }

                            return array_;
                        },
                        type: "text"
                });
, headers : {
                    1: {
                        sorter: "parser"
                    },
          }
, textSorter : {

                        1:  function(aStr, bStr) {
                            <cfif isdefined("attributes.id") and attributes.id eq 0.1>
                                var value = "";
                                var previousValue = "";
                                console.log("array_",array_);

                                 for (var i = 0; i < array_.length; i++) {
                                    value = array_[i];
                                    previousValue = array_[i-1];
                                    // console.log("value",value, "previousValue", previousValue);

                                 }

                                 return value > previousValue ? 1 : value < previousValue ? -1 : 0;
                            </cfif>
                             },
          }
Sample data: 
var arr = [
   "1",
   "1",
  "1.1.1",
  "1.1.1.1",
  "1.1.1.2",
  "1.1.2",
  "1.1.3",
  "1.1.4",
  "1.1.5",
  "1.1.6",
  "1.1.7",
  "1.1.7.1",
  "1.1.7.2",
  "1.1.7.3",
  "1.1.8",
  "1.1.8.1",
  "1.1.9",
  "1.1.10",
  "1.1.11",
  "1.1.11.1",
  "1.1.11.2",
  "1.1.11.3",
  "1.1.11.4",
  "1.1.11.5",
  "1.1.11.6",
  "1.1.11.7",
  "1.1.11.8",
  "1.1.11.9",
  "1.1.12",
  "1.1.13",
  "1.1.13.1",
  "1.1.13.2",
  "1.1.13.3",
  "1.1.14",
  "1.1.15",
  "1.1.15.1",
  "1.1.15.2",

  "1.2",
  "1.2.1",
  "1.2.2",
  "1.2.3",
  "1.2.3.1",
  "1.2.3.2",
  "1.2.3.3",
  "1.2.3.4",
  "1.2.3.5",
  "1.2.3.6",
  "1.2.3.7",
  "1.2.4",
  "1.2.5",
  "1.2.6",
  "1.2.7",
  "1.3.1",
  "1.3.2",
  "2",
  "2.1",
  "1.3"
 ]

is 函数和参数在本页描述:https://mottie.github.io/tablesorter/docs/example-parsers.html

本质上,它仅用于 auto-detect 如果解析器应该在特定列上使用。

  • 如果要auto-detect,那么只有returntrue如果单元格字符串(s),单元格 属性 或属性符合您的条件。
  • 如果您已经知道 table 中有哪些数据,特别是您想要自定义解析器的哪些列,请将 is 函数设置为 always return false;然后将header(thead中的th)class名称设置为sorter-{parser.id}(参见https://mottie.github.io/tablesorter/docs/example-option-built-in-parsers.html

在上面的示例代码中,我猜你正在对 ipv4 地址进行排序?查看 https://mottie.github.io/tablesorter/docs/example-parsers-ip-address.html - 解析器本身应该使用任何长度的小数点分隔值,例如1.2.3.4.5.6.7.99


更新:我忘记了如果部分数量不一致,"ipAddress" 解析器将无法按预期工作;例如如果列中的所有单元格都有 4 个部分“1.1.1.1”(数字以小数点分隔)

,它将起作用

这是一个修改后的版本,将按照您的预期进行排序 - demo

 var maxSections = 4; // e.g. "1.1.1.1" = 4; "1.1.1.1.1" = 5
 var maxCharsPerSection = 3; // e.g. "1.1.1.999" = 3; "1.1.1.9999" = 4

 // Don't modify anything below
 var filler = new Array(maxCharsPerSection).fill('0').join('');

 $.tablesorter.addParser({
   id: 'decimal-separated',
   is: function() {
     return false;
   },
   format: function(s) {
     var i = 0,
       a = s ? s.split('.') : [],
       r = [];
     for (i = 0; i < maxSections; i++) {
       r.push((filler + (a[i] || '0')).slice(-maxCharsPerSection));
     }
     return s ? r.join('.') : s;
   },
   type: 'text'
 });


 $(".big_list").tablesorter({
   sortList: [
     [0, 0]
   ],
   headers: {
     0: {
       sorter: 'decimal-separated'
     }
   }
 });