我需要获得一行中多个单元格的选定值,并使用kendo grid ui jquery找到它们的和。
是否可以选择多个列,并在每行上找到总和,并将结果显示为另一列。所选列和结果格式
- 将
selectable.mode
属性设置为multiple, cell
- 在
change
事件中,通过调用this.select()
获取所选单元格 - 通过调用
Object.values
仅获取所选单元格的值 - 筛选值以仅返回
<td />
元素的值 - 映射过滤后的值以仅返回转换后的元素内部文本
- 通过将值相加来减少筛选和映射的值
示例:
change: function() {
var selectedCells = Object.values(this.select())
.filter(function(value) {
return value && value.nodeName && value.nodeName == 'TD';
})
.map(function(td) {
return Number(td.innerText);
});
var total = selectedCells.reduce(function(a, b) {
return a + b;
}, 0);
console.log(total);
}
Fiddle:https://dojo.telerik.com/oNUJaxiG
更新
在问题评论中进行了一些讨论后,OP明确表示,他们需要具有选定单元格的每一行的总和。在这种情况下,change
方法将需要稍微修改,以基本上按行分组:
change: function() {
var selectedCells = Object.values(this.select())
.filter(function(value) {
return value && value.nodeName && value.nodeName == 'TD';
});
var selectedRows = {};
$.each(selectedCells, function(index, cell) {
var parent = cell.parentNode.getAttribute('data-uid');
if (Object.keys(selectedRows).indexOf(parent) < 0) {
selectedRows[parent] = [];
}
selectedRows[parent].push(Number(cell.innerText));
});
$.each(Object.keys(selectedRows), function(index, key) {
var row = selectedRows[key];
var total = row.reduce(function(a, b) {
return a + b;
}, 0);
console.log(`Row ${key} total: ${total}`);
});
}
Fiddle:https://dojo.telerik.com/unOTesaD