0

我的代码中有这些块:

$.fn.dataTableExt.afnSortData['dom-text'] = function (oSettings, iColumn) {
    var aData = [];
    $('td:eq(' + iColumn + ') input', oSettings.oApi._fnGetTrNodes(oSettings)).each(function () {
        aData.push(this.value);
    });
    return aData;
}

$.fn.dataTableExt.afnSortData['dom-data-rk'] = function (oSettings, iColumn) {
    var aData = [];
    $('td:eq(' + iColumn + ')', oSettings.oApi._fnGetTrNodes(oSettings)).each(function () {
        aData.push($(this).attr('data-rk'));
    });
    return aData;
}

这是什么意思:$.fn.dataTableExt 我不熟悉 $.fn。

我也可以将这两者结合起来吗?

4

3 回答 3

1

和属性不同dom-textdom-data-rk因此您不能将它们 100% 组合到同一个块中。此外,功能实现略有不同:

  • 'td:eq(...) input''td:eq(...)',
  • aData.push(this.value)aData.push($(this).attr('data-rk')

使用 jQuery.extend:

$.extend($.fn.dataTableExt.afnSortData, {
  'dom-text': function(oSettings, iColumn) { ... },
  'dom-data-rk': function(oSettings, iColumn) { ... }
});
于 2012-08-26T16:46:13.740 回答
1

您可以做的是使用$.each包含差异的对象。然后每个函数的通用代码路径可以相同。但是,考虑到函数已经很简洁并且存在一些差异,实际上并没有更简洁的解决方案:

$.each({
  'dom-text': {
    selector: function(i) { return 'td:eq(' + i + ') input'; },
    item: function(elem) { return elem.value; }
  },
  'dom-data-rk': {
    selector: function(i) { return 'td:eq(' + i + ')'; },
    item: function(elem) { return $(elem).data('rk'); }
  }
}, function(key, descriptor) {
  $.fn.dataTableExt.afnSortData[key] = function(oSettings, iColumn) {
    var aData = [];

    $(oSettings.oApi._fnGetTrNodes(oSettings))
      .find(descriptor.selector(iColumn))
      .each(function () {
          aData.push(descriptor.item(this));
      });

    return aData;
  };
});
于 2012-08-26T16:52:56.767 回答
0

由于它们具有不同的输入和输出,因此将它们组合起来并不是一个好主意。从我所见,第一个获取指定列的输入值,并将它们添加到数组中。第二个获取属性名称 data-rk 并将它们添加到数组中。

如果你真的必须将它们组合起来,你可以将输出添加到不同的列表中,但是你必须使用 IFs 语句来检查它是哪种类型的排序,这将是一种......

于 2012-08-26T16:49:19.717 回答