jQuery DataTable添加动态列 [英] jQuery DataTable add dynamic columns

查看:88
本文介绍了jQuery DataTable添加动态列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个像下面这样的JSON对象(数据源),在那个JSON对象中,属性'viewClasses'有时为空白,这儿我想做的是,如果'viewClasses'有任何记录要添加一个动态列到表和列标题的名称将是'viewClasses.class'的值,我尝试了以下代码,但未按预期工作.

I have a JSON object like below (dataSource) in that JSON object the property 'viewClasses' sometimes comes as blank, here what I want to do is if 'viewClasses' have any record I want to add a dynamic column to the table and the name of the column header will be the value of 'viewClasses.class', I have tried the below code but it's not working as expected.

以下是以下代码的结果-

这就是我想要的样子

var dataSource = [{
  "Name": "PI61890",
  "portfolioName": "PGIM Emerging Markets Debt Local Currency Fund",
  "StartDate": "2020-10-31T00:00:00",
  "EndDate": "2020-10-31T00:00:00",
  "processDate": "2020-10-31T00:00:00",
  "viewDetails": {
    "Name": "Management",
    "Code": "MGMT",
    "category": "Asset",
    "description": "Asset Description",
    "viewClasses": [{
        "class": "A",
        "amount": 2000.0
      },
      {
        "class": "B",
        "amount": 3000.0
      }
    ]
  },
}];

var column = [];

function AddColumn() {
  $.each(dataSource[0].viewDetails.viewClasses[0], function(key, value) {
    var my_item = {};
    my_item.data = key;
    my_item.title = key;
    column.push(my_item);
  });
}

$('#example').dataTable({
  data: dataSource[0].viewDetails.viewClasses,
  "columns": column,
  "paging": false,
  "bInfo": false
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.min.js"></script>
<style src="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.min.css"></style>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js"></script>

<div class="container">
  <div class="row">
    <div class="col-md-12">
      <table id="example" class="table table-striped" width="100%"></table>
    </div>
  </div>
</div>

推荐答案

您的源数据需要以两种不同的方式进行迭代,以构建DataTables需要的两个不同的动态数组:-列数据和行数据.

Your source data needs to be iterated in two different ways, to build the two different dynamic arrays which DataTables needs: - column data and row data.

首先,您有两列AB.要为它们构建阵列,可以使用以下命令:

Firstly you have two columns, A and B. To build the array for these, you can use the following:

var dynamicColumns = [];

columnData.forEach(function (columnItem) {
  // extract the column definitions:
  var dynamicColumn = {};
  dynamicColumn['data'] = columnItem['class'];
  dynamicColumn['title'] = 'Heading ' + columnItem['class'];
  dynamicColumns.push(dynamicColumn);
});

我选择不使用jQuery迭代器,因为我想访问数组中的每个对象.

I chose not to use the jQuery iterator because I want access to each object in the array.

这给了我以下结构:

[
  {
    "data": "A",
    "title": "Heading A"
  },
  {
    "data": "B",
    "title": "Heading B"
  }
]

但是对于表中的数据,我只想结束一行数据:

But for the table's data, I want to end up with only one row of data:

var dynamicRow = {};
  
columnData.forEach(function (columnItem) {
  // extract the data set:
  var field = columnItem['class'];
  var value = columnItem['amount'];
  dynamicRow[field] = value;
});
dynamicRows.push(dynamicRow);

在这里,我得到以下内容:

Here, I end up with the following:

[
  {
    "A": 2000,
    "B": 3000
  }
]

现在,我有了初始化DataTable所需的结构.因此,总体脚本如下:

Now I have the structures I need for my DataTable initialization. The overall script therefore is as follows:

<script type="text/javascript">

var dataSource = [{
  "Name": "PI61890",
  "portfolioName": "PGIM Emerging Markets Debt Local Currency Fund",
  "StartDate": "2020-10-31T00:00:00",
  "EndDate": "2020-10-31T00:00:00",
  "processDate": "2020-10-31T00:00:00",
  "viewDetails": {
    "Name": "Management",
    "Code": "MGMT",
    "category": "Asset",
    "description": "Asset Description",
    "viewClasses": [{
        "class": "A",
        "amount": 2000.0
      },
      {
        "class": "B",
        "amount": 3000.0
      }
    ]
  },
}];

var dynamicColumns = [];
var dynamicRows = [];

function buildDynamicData() {

  var columnData = dataSource[0].viewDetails.viewClasses;
  
  var dynamicRow = {};
  
  columnData.forEach(function (columnItem) {
    // extract the column definitions:
    var dynamicColumn = {};
    dynamicColumn['data'] = columnItem['class'];
    dynamicColumn['title'] = 'Heading ' + columnItem['class'];
    dynamicColumns.push(dynamicColumn);
    
    // extract the data set:
    var field = columnItem['class'];
    var value = columnItem['amount'];
    dynamicRow[field] = value;
  });
  dynamicRows.push(dynamicRow);

}

buildDynamicData();

console.log(dynamicColumns);
console.log(dynamicRows);

  $(document).ready(function() {
  
$('#example').DataTable({
  columns: dynamicColumns,
  data: dynamicRows,
  paging: false,
  info: false
});


  } );

</script>

最终结果如下所示(在我的测试环境中):

And the end result looks like this (in my test environment):

这篇关于jQuery DataTable添加动态列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆