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に精通していません。

また、これら2つを組み合わせることができますか?

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

入力と出力が異なるため、それらを組み合わせることはお勧めできません。私が見ることができるものから、最初のものは指定された列の入力値を取得し、それらを配列に追加します。2つ目は、属性名data-rkを取得し、それらを配列に追加します。

本当にそれらを組み合わせる必要がある場合は、出力をさまざまなリストに追加できますが、IFステートメントを使用して、それがどのタイプのソートであるかを確認する必要があります。

于 2012-08-26T16:49:19.717 に答える