如何将第二个(隐藏)值添加到 datatables.net 中的单元格?

Posted

技术标签:

【中文标题】如何将第二个(隐藏)值添加到 datatables.net 中的单元格?【英文标题】:how add second (hidden) value to cell in datatables.net? 【发布时间】:2021-08-29 22:05:13 【问题描述】:

场景:我想通过 POST 将选定单元格的值发送到控制器。 如何为每个选定的单元格发送两个值;一个值是可见的,另一个是隐藏的?

例如,每个单元格都包含时间和日期,只有时间显示在数据表中。 我想同时发布时间和日期。

有没有完整的使用mData和fnGetData的例子?

这是我的代码:

$('#example').DataTable(
                "ajax": 'api/Tcal',
                "iDisplayLength": '100',
                "columns": [

                     "data": "id" ,
                     "data": "shanbeh" ,
                     "data": "yekShanbeh" ,
                     "data": "dooShanbeh" ,
                     "data": "sehShanbeh" ,
                     "data": "charShanbeh" ,
                     "data": "panjShanbeh" ,
                     "data": "jommeh" ,
                ],
                language: 
                    url: '/lib/datatables/js/Persian.json'
                ,
                select: 
                    style: 'multi',
                    items: 'cell'
                
            );
        );

        $("#Button1").click(function () 
            var oData = $("#example").DataTable().cells( selected: true ).data().toArray();
            jQuery.ajax(
                type: "POST",
                url: "api/TGCells",
                dataType: "json",
                contentType: "application/json;",
                data: JSON.stringify( data: oData ),
                success: function (data) 
                    alert(data);
                    console.log(data);
                
            );

【问题讨论】:

欢迎来到 Stack Overflow。请仔细查看tour,尤其是关于不问“您尚未尝试找到答案的问题(展示您的工作!)”的部分。也看看How to Ask。 您可以edit您的问题向我们展示您尝试过的内容、您使用的代码和数据以及运行时实际发生的情况。 感谢安德鲁詹姆斯。我编辑它。 【参考方案1】:

这是一种方法:

第 1 步

更改 DataTable,使其在每个单元格中存储两个值,使用两个 <span> 元素,其中一个跨度中的数据被隐藏:

<td>
  <span class="part_one">my first value</span>
  <span class="part_two" hidden>my second value</span>
</td>

您可以使用 DataTable 中的列渲染器来执行此操作:

"render": function ( data, type, row ) 
  if ( type === "display" ) 
    return '<span class="part_one">' + data + 
      '</span><span class="part_two" hidden>' + row.id + 
      '</span>';
   else 
    return data; // for sorting and filtering, just use the main value
  

第 2 步

在您的按钮功能中,您可以访问 DataTable 节点而不是单元格,以访问包含 &lt;span&gt; 元素的内部 html

$("#Button1").click(function () 
  var table = $('#example').DataTable();
  var nodes = table.cells( selected:true ).nodes().toArray(); 
  nodes.forEach( (node) =>  
    var partOne = $(node).find('span.part_one').text();
    var partTwo = $(node).find('span.part_two').text();
    console.log( partOne, ':', partTwo );
   );
 );

一旦您将每个值都放在一个单独的变量中,您就可以根据需要构建您的 Ajax 请求。


完整示例:

这使用了一个测试 Ajax 响应,用于构建 DataTable:

<!doctype html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Demo</title>
  <script src="https://code.jquery.com/jquery-3.5.1.js"></script>
  <script src="https://cdn.datatables.net/1.10.22/js/jquery.dataTables.js"></script>
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.22/css/jquery.dataTables.css">
  <link rel="stylesheet" type="text/css" href="https://datatables.net/media/css/site-examples.css">

  <!-- select extension -->
  <link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/select/1.3.3/css/select.dataTables.min.css"/>
  <script type="text/javascript" src="https://cdn.datatables.net/select/1.3.3/js/dataTables.select.min.js"></script>

</head>

<body>

<div style="margin: 20px;">

    <table id="example" class="display dataTable cell-border" style="width:100%">
    </table>

    <br>

    <button id="Button1">Click Me</button>

</div>

<script>
 
$(document).ready(function() 

  $('#example').DataTable(
    ajax: 
      method: "GET",
      url: "https://jsonplaceholder.typicode.com/posts",
      dataSrc: "",  
    ,
    "columns": [
       "title": "User ID", "data": "userId" ,
       
        "title": "Title", 
        "data": "title",
        "render": function ( data, type, row ) 
          if ( type === "display" ) 
            return '<span class="part_one">' + data + 
              '</span><span class="part_two" hidden>' + row.id + 
              '</span>';
           else 
            return data;
          
        
      
    ],
    select: 
      style: 'multi',
      items: 'cell'
    
  );

 );

$("#Button1").click(function () 
  var table = $('#example').DataTable();
  var nodes = table.cells( selected:true ).nodes().toArray(); 
  nodes.forEach( (node) =>  
    var partOne = $(node).find('span.part_one').text();
    var partTwo = $(node).find('span.part_two').text();
    console.log( partOne, ':', partTwo );
   );
 );

</script>

</body>
</html>

从“标题”列中选择两个或多个单元格,然后单击按钮(位于页面底部)。

【讨论】:

以上是关于如何将第二个(隐藏)值添加到 datatables.net 中的单元格?的主要内容,如果未能解决你的问题,请参考以下文章

将第二个 UIToolbar 添加到 UITableViewController

将第二个表中的第二个(条件)结果添加到 SQL 查询

将第二个输入语句添加到代码后出错 [关闭]

将第二个功能添加到单个按钮

将第二个图表添加到 Dash app.layout 的问题

TypeError:将第二个图例添加到绘图时,“PathCollection”对象不可迭代