Jquery 如何在Handsontable中使用自定义呈现程序对列进行排序?

Jquery 如何在Handsontable中使用自定义呈现程序对列进行排序?,jquery,handsontable,custom-renderer,Jquery,Handsontable,Custom Renderer,可手持设备版本0.34.2(可能无法升级) 我有一个显示客户信息的可触摸索引页。第一列是id列。这是一个html链接。若用户点击它将看到客户的详细信息。表最初按每条记录的上次修改时间排序 $('#custInfo').handsontable({ data: custData, colHeaders: ['Cust No', 'Cust Name', ..., 'Last Mod Time'], columnSorting: true, columns: [ { ren

可手持设备版本0.34.2(可能无法升级)

我有一个显示客户信息的可触摸索引页。第一列是id列。这是一个html链接。若用户点击它将看到客户的详细信息。表最初按每条记录的上次修改时间排序

$('#custInfo').handsontable({
  data: custData,
  colHeaders: ['Cust No', 'Cust Name', ..., 'Last Mod Time'],
  columnSorting: true,
  columns: [ 
    { renderer: safeHtmlRenderer }, 
    {}, 
    ...
    { type: 'date', 
      dateFormat: 'DD-MM-YYYY by:mm:as' }]
  ...
}];

  function safeHtmlRenderer(instance, td, row, col, prop, value, cellProperties) {
    var escaped = Handsontable.helper.stringfy(value);
    td.innerHtml = escaped;
    return td;
  };
屏幕上的表格如下所示:

261 Mary 30-10-2018 17:30:17

83保罗12-12-2018 09:13:48

如果单击第一列以升序排序,则排序仅按字母顺序。也就是说“261”在“83”之前


如何根据客户编号(而不是下面的链接)进行排序?

看起来StackOverflow中回答的问题很少。所以,让我回答我自己的问题

事实证明,列是否具有自定义渲染器并不重要。重要的是您提供的比较功能

请注意以下版本适用于0.34.2(最新版本,版本7不起作用)

Re:(谢谢你,这个博客救了我。)

使用版本0.34.2,参考页面中的所有示例都可以完美运行

[0]=行索引

a[1]=值

如果第一行中的CustNo是“”,则[1]是链接

linkA1是从[1]分裂而来的字符串数组

linkA2=178'178
columns: [
{ data: 'CustNo',
  renderer: safeHtmlRenderer,
  sortFunction: function(sortOrder) {
    return function(a, b) {
      var linkA1 = a[1].split(">");
      var linkA2 = linkA1[1].split("<");  // linkA1[1] => '178</a'
      var CustNoA = parseInt(linkA2[0]);  // linkA2[0] => '178'

      var linkB1 = b[1].split(">");
      var linkB2 = linkB1[1].split("<");
      var CustNoB = parseInt(linkA2[0]);

      if (CustNoA < CustNoB) {
        return sortOrder ? -1 : 1;
      }

      if (CustNoA > CustNoB) {
        return sortOrder ? 1 : -1;
      }

      return 0;
    }
  }