如何在JQuery数据表中添加Rowspan

jv2fixgn  于 2023-06-22  发布在  jQuery
关注(0)|答案(3)|浏览(184)

我使用Jquery数据表来构造一个表。
我的要求如下

这不是一个静态表,我们使用JSON数据呈现它。
在这里,我使用“aoColumns”动态呈现行。
有没有什么方法可以使用rowspan来跨越单元格(1,2,大卫,Alex)。
数据表是否支持这种类型的表?

vlf7wbxs

vlf7wbxs1#

数据表不支持这种开箱即用的分组。但是,在许多情况下,有一个可用的插件。
它被称为RowsGroup,位于以下位置:Datatables Forums。还包括live example
如果您将本例中的JS部分更改为以下内容,您将在输出窗口中显示所需的输出。

$(document).ready( function () {
  var data = [
    ['1', 'David', 'Maths', '80'],
    ['1', 'David', 'Physics', '90'],
    ['1', 'David', 'Computers', '70'],
    ['2', 'Alex', 'Maths', '80'],
    ['2', 'Alex', 'Physics', '70'],
    ['2', 'Alex', 'Computers', '90'],
  ];
  var table = $('#example').DataTable({
    columns: [
        {
            name: 'first',
            title: 'ID',
        },
        {
            name: 'second',
            title: 'Name',
        },
        {
            title: 'Subject',
        }, 
        {
            title: 'Marks',
        },
    ],
    data: data,
    rowsGroup: [
      'first:name',
      'second:name'
    ],
    pageLength: '20',
    });
} );

以下是结果的屏幕截图:

7cwmlq89

7cwmlq892#

我尝试了RowsGroup plugin,但它只是通过劫持DataTables排序机制来实现这一点。如果你告诉它对一个给定的列进行分组,它为你做的基本上就是对那个列应用一个你不能关闭的排序。所以,如果你想按另一列排序,你不能。在我的申请表上没有。
相反,这里有一个可以让你实现这个结果的食谱:
https://jsfiddle.net/bwDialogs/fscaos2n
基本思想是将所有多行数据平铺到一行中。您的第二、第三等中的内容行存储为第一行中的隐藏<script>模板标记。
它的工作原理是使用DataTables的drawCallback函数在DataTables呈现DOM后对其进行操作,而不必尝试解析rowspan单元格内容来混淆DataTables。
由于这会在DataTables完成其魔术之后修改DOM,因此即使分页、搜索和排序,多行部分也会粘在一起。
干杯

    • 编辑:**这里有另一个方便的方法,可以将大多数基于HTML的表转换为drawCallback函数所期望的:https://jsfiddle.net/zuxLq4g8/

它检查没有rowspan的所有行,并将它们插入到上面有rowspan的行中的模板脚本中。如果您有一些完全独立的行,则此代码将无法工作。

ih99xse1

ih99xse13#

添加下面的代码并根据您的要求进行修改

$(window).on("load",function() {           
            MakeRows();
            addRowspan();
            $(".paginate_button").on("click", function() {
                MakeRows();
                addRowspan();
            });
        });

        function MakeRows() {
            var tmp_tbl = $("#dashboardDetails");
            var _l = tmp_tbl.find("tr");
            var _td = "",_t_td = "", old_txt = "",_t_txt = ""; _tr_count = 1;_tr_countadd = 1;
            for(i = 0;i< _l.length; i ++) {
                _t_td = tmp_tbl.find("tr").eq(i).find("td").eq(0).find("span");
                _t_txt = $(_t_td).text();
                _t_txt = _t_txt.replace(/\//,"_");_t_txt = _t_txt.replace(/\//,"_");

                if (_t_txt.length > 0) {
                    if(_t_txt != old_txt) {
                        if($(_l).eq(i).hasClass(_t_txt) == false) {
                            _tr_count = 1;_tr_countadd = 1;
                            $(_l).eq(i).addClass("" + _t_txt + "").addClass(_t_txt + "_" + i);
                        }
                        old_txt = _t_txt;
                    } else {
                        _tr_count = _tr_count + 1;
                        if (_tr_countadd == 1) {
                            $(_l).eq(i).addClass("" + _t_txt + "").addClass(_t_txt + "_" + i)
                                .addClass("hiddenClass").addClass("maintr").attr("trcount", _tr_count).attr("addedtrcount", "maintr");                            
                            _tr_countadd = _tr_countadd + 1;
                        } else {
                            $(_l).eq(i).addClass("" + _t_txt + "").addClass(_t_txt + "_" + i)
                                .addClass("hiddenClass").attr("trcount", _tr_count)
                        }
                    }
                }
                _t_td = "";
            }
        }

        function addRowspan() {
            var t_txt = "";
            var _alltrmain = $(".maintr");
            var _h_td = ["0","10","11","12","13"];
            for (i = 0; i <= _alltrmain.length; i ++) {
                for (j = 0; j <= _h_td.length; j ++) {
                    t_txt = $(_alltrmain).eq(i).attr("trcount");
                    $(_alltrmain).eq(i).prev().find("td").eq(_h_td[j]).attr("rowspan", t_txt);
                }
            }
        }

相关问题