我的代码中有这些块:
$.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。
我也可以将这两个结合起来吗?
答案 0 :(得分:1)
dom-text
和dom-data-rk
属性不同,因此您无法将它们100%合并到同一个块中。此外,功能实现略有不同:
'td:eq(...) input'
与'td:eq(...)'
,aData.push(this.value)
vs aData.push($(this).attr('data-rk')
。使用jQuery.extend:
$.extend($.fn.dataTableExt.afnSortData, {
'dom-text': function(oSettings, iColumn) { ... },
'dom-data-rk': function(oSettings, iColumn) { ... }
});
答案 1 :(得分: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;
};
});
答案 2 :(得分:0)
由于它们具有不同的输入和输出,因此将它们组合起来不是一个好主意。从我所看到的,第一个获取指定列的输入值,并将它们添加到数组。第二个获取属性名称data-rk并将它们添加到数组中。
如果你真的必须将它们组合起来,你可以将输出添加到不同的列表,但是你必须使用IFs语句来检查它的排序类型,这将是一种......