Javascript 更新一列中的数据后更新表(重新计算)

Javascript 更新一列中的数据后更新表(重新计算),javascript,datatables,Javascript,Datatables,我正在构建一个启用了DataTable的简单页面 来自我的服务器的数据如下所示: [{"name": "John","salary": 2000,"bonus1": 100,"bonus2": 100}, {"name": "Jack","salary": 2500,"bonus1": 0,"bonus2": 200}, {"name": "Bill","salary": 2000,"bonus1": 300,"bonus2": 300} ] 我需要添加并计算第五列,该列表示员工工资的

我正在构建一个启用了DataTable的简单页面

来自我的服务器的数据如下所示:

[{"name": "John","salary": 2000,"bonus1": 100,"bonus2": 100},
 {"name": "Jack","salary": 2500,"bonus1":   0,"bonus2": 200},
 {"name": "Bill","salary": 2000,"bonus1": 300,"bonus2": 300}
]
我需要添加并计算第五列,该列表示员工工资的百分比值(工资/所有工资的总和)

fnPreDrawCallback
中,我可以修改
oSettings.aoData
所以当我修改
console.log(oSettings.aoData)
时,我会得到正确的值,但表中的列为空

我的
fnPreDrawCallback
函数如下所示:

"fnPreDrawCallback": function (oSettings) {
          iTotal = [0, 0, 0]; //declared in $(document).ready
          var dataLength=oSettings.aoData.length;
            for (var i = 0; i < dataLength; i++) {
                iTotal[0] += oSettings.aoData[i]._aData.salary;
                iTotal[1] += oSettings.aoData[i]._aData.bonus1;
                iTotal[2] += oSettings.aoData[i]._aData.bonus2;
            }

          for (i = 0; i < dataLength; i++) {
                oSettings.aoData[i]._aData.percent=(oSettings.aoData[i]._aData.salary / iTotal[0] * 100).toFixed(2)+'%';

            }
          console.log(oSettings.aoData);
        },
“fnPreDrawCallback”:函数(oSettings){
iTotal=[0,0,0];//在$(文档)中声明。准备好了吗
var dataLength=oSettings.aoData.length;
对于(变量i=0;i
这是我的密码:

我的问题:我应该在哪里更新数据,以便在表中可以看到更新?


我希望避免使用选择器和更新DOM内容,因为我希望能够使用TableTools或服务器端处理导出表。

您可以使用链接下方的DataTables页脚回调检查

也请检查此讨论

您可以使用链接下方的DataTables页脚回调检查

也请检查此讨论

我不明白你为什么不同时做这两件事,更新aoData(以便导出)和更新html(以便正确显示)

我知道这是一种黑客行为,但它应该会起作用:)

使用fnUpdate()进行编辑


我不明白你为什么不同时做这两件事,更新aoData(以便导出)和更新html(以便正确显示)

我知道这是一种黑客行为,但它应该会起作用:)

使用fnUpdate()进行编辑

以下是答案

基本上,您需要首先计算工资总额(我将您的数据移动到一个变量,然后在呈现表格之前计算总额) 在这之后,您需要在%列上使用fnRender函数来计算和显示百分比,如下所示(下面是%的列定义)

这是答案

基本上,您需要首先计算工资总额(我将您的数据移动到一个变量,然后在呈现表格之前计算总额) 在这之后,您需要在%列上使用fnRender函数来计算和显示百分比,如下所示(下面是%的列定义)


fnFooterCallback
fnPreDrawCallback
之后激发。你不明白我的问题。我知道如何添加摘要,我需要更新列。我可以修改aoData,这没问题,我需要知道更新后如何显示它。
fnFooterCallback
fnpredrawlack
之后触发。你不明白我的问题。我知道如何添加摘要,我需要更新列。我可以修改aoData,这没问题,我需要知道更新后如何显示它。我从前面的问题和您的回答中了解到了这一问题:)艾伦在datatables论坛上写信给我,说我应该使用FNDUpdate,但我不知道在我的情况下如何使用它,在这种情况下,我应该更新aoData以查看表中的更改。我知道这是在反复问同样的问题,但在真实的报告中,我将有大约30列和100多行。您的解决方案目前是最好的,但是如果有一个选项可以修改aoData并查看更新,那将是非常棒的:)@Misiu好的,我将使用fnUpdate@Misiu我及时抓住了赏金,我希望,这是解决方案,您可以使用fnUpdate()在click handler Hi中:)这几乎是完美的:)因为当我单击show/hide按钮时百分比列会更新。但我认为将
fnUpdate
更新为第二个单击处理程序不会有问题。这样,在我移动行之后,更新将可见。希望这足够清楚:)除了一切都很好:)我做了一点修改:我知道这可以优化,但现在这个效果更好。再次感谢,你救了我一天!我从我之前的问题和你们的回答中了解到了这种黑客行为:)艾伦在datatables论坛上写信给我说我应该使用FNDUpdate,但我不知道如何在我的情况下使用它,在这种情况下,我应该更新aoData以查看表中的更改。我知道这是在反复问同样的问题,但在真实的报告中,我将有大约30列和100多行。您的解决方案目前是最好的,但是如果有一个选项可以修改aoData并查看更新,那将是非常棒的:)@Misiu好的,我将使用fnUpdate@Misiu我及时抓住了赏金,我希望,这是解决方案,您可以使用fnUpdate()在click handler Hi中:)这几乎是完美的:)因为当我单击show/hide按钮时百分比列会更新。但我认为将
fnUpdate
更新为第二个单击处理程序不会有问题。这样,在我移动行之后,更新将可见。希望这足够清楚:)除了一切都很好:)我做了一点修改:我知道这可以优化,但现在这个效果更好。再次感谢,你救了我一天<代码>fnRender
已弃用。第二件事:开始时,将计算移到表外会有所帮助,但请尝试将第二个表中的行添加到第一个表中。添加修改后,百分比列不会刷新。感谢您尝试:)
fnRender
已被弃用。第二件事:开始时将计算移到表外有帮助
 {
            "sTitle": "%",
            "bVisible": true,
            "sType": "string",
            "sWidth": "50px",
            "sClass": "center percent",
            "mData": "percent",
          "fnRender": function(o) {return o.aData.salary/totalSalaries}
        }