DataTables - 使用Datetime-moment时子行不起作用

时间:2017-02-21 19:11:45

标签: javascript jquery datetime datatables

我设法将它变成了live.datatables.net并且几乎正常工作,除了我无法将最后的细节显示为孩子。

行中的最后一行应显示"消息信息:" - 但我无法弄清楚如何让细节显示出来。我试图解决的问题是当前的DataTable没有正确排序日期 - 所以使用" datetime-moment.js"插件允许日期正确排序,但已经打破"破坏"如何"隐藏"孩子在工作。我已经把它弄到了这么远,但是我很难知道如何获得消息信息"显示。

例如,第一个" TR"有#" TD" of" raUni = 71421861,action = U,beqUni = 1700538,rateCode = F-BAIT" - 当用户点击"显示/隐藏额外信息"链接,它应该用"消息信息打开每一行:raUni = 71421861,action = U,beqUni = 1700538,rateCode = F-BAIT"。

有什么建议吗?

谢谢,迈克尔

http://live.datatables.net/yavoradu/5/edit

1 个答案:

答案 0 :(得分:0)

我找出了你的问题并做了一些改变。 我删除了你输入的所有div,因为它们不是有效的HTML。 在您的格式函数中,您永远不会定义数据列,因此d.msgInfo不存在。该行的数据是一个数组,所以在我修改过的代码中,它的d [15]。

为了好玩,我添加了一个用于扩展单个行的按钮的列。 另外,我删除了顶部的链接,并将其替换为表格底部的按钮。

http://live.datatables.net/bovonodi/1/edit

var table = $('#example').DataTable(
    { "columnDefs" : [ { "targets" : -1, "visible" : false, "name" : 'msg_info'} ],
    "iDisplayLength" : 15,
    dom:'tBp',
    "aLengthMenu" : [ [15, 25, 50, 100, -1 ], [ 15, 25, 50, 100, "All" ] ],
    "order" : [ [ 2, "desc" ] ],
    columns:[    {
            "className":      'details-control',
            "orderable":      false,
            "data":           null,
            "defaultContent": ''
        },null, null, null, null, null, null,
          null, null, null, null, null, null,
          null, null, null],
    buttons:[{text:'Show Info', action:function(e, dt, node, config){

       if(node[0].innerText == "Show Info"){
          node[0].innerText = "Hide Info";
          hideShowExtraInfo(true);
       }
       else { 
            node[0].innerText = "Show Info";
            hideShowExtraInfo(false);
        }
   }}]

});


$('#example tbody').on('click', 'td.details-control', function () {
    var tr = $(this).closest('tr');
    var row = table.row( tr );
    var td = $(this);

    if ( row.child.isShown() ) {
        // This row is already open - close it
        row.child.hide();
        td.removeClass('shown');
    }
    else {
        // Open this row
        row.child( format(row.data()) ).show();
        td.addClass('shown');
    }
} );

} );


function hideShowExtraInfo(doShow) {
      var table = $('#example').DataTable();
      table.rows().every(function() {

          console.log("Temp");
          var tr = $(this.node());
          var td = tr.children(".details-control");

          if (!doShow) {
          // This row is already open - close it
              this.child.hide();
              td.removeClass('shown');
          } else {
              // Open this row
              this.child(format(this.data())).show();
              td.addClass('shown');
          }
      });
  }

 function format(d) {

      // `d` is the original data object for the row
      return '<table cellpadding="5" cellspacing="0" border="0" style="padding-left:50px;">'
        + '<tr><td>Message Info:</td><td>'
        + d[15]
        + '</td></tr></table>';

  }