javascript动态合并纵向单元格

1.需求

合并相邻行内容相同的单元格。

2.概念

rowspan指定单元格纵向跨越的行数。如rowspan被设为3,这表示该单元格必须跨越三行(本身一行,加上另外两行)

3.公共方法

  /**
   * 单元格合并方法,增加rowspan属性
   * @param data 要处理的数据
   * @param nameList 合并的字段list
   */
function rowspanFun(data, nameList) {
    for (var i = 0; i < nameList.length; i++) {
      var name = nameList[i];
      var startRow = 0;
      var endRow = data.length;
      var mergeNum = 1;
      if (endRow != 1) {
        for (var j = startRow; j < endRow; j++) {
          if (j == endRow - 1) { //判断是否是最后一个元素
            if (startRow == endRow - 1) {
              data[j][name + 'Rowspan'] = 1;
            }
          } else {
            if (data[startRow][name] == data[j + 1][name]) {
              data[j + 1][name + 'Rowspan'] = 0;
              mergeNum = mergeNum + 1;
              data[startRow][name + 'Rowspan'] =mergeNum;
            } else {
              startRow = j + 1;
              if (mergeNum > 1) {
                data[startRow][name + 'Rowspan'] = 1;
              } else {
                data[j][name + 'Rowspan'] = 1;
              }
              mergeNum = 1;
            }
          }
        }
      } else {
        data[0][name + 'Rowspan'] = 1;
      }
    }
    return data;
  }

4.js中调用公共方法

var data =  [
      {name: 'dwj', sex: '女', age: 20},
      {name: 'dwj', sex: '男', age: 20},
      {name: 'dwq', sex: '女', age: 20},
      {name: 'other', sex: '女', age: 20}
    ];
rowspanFun(data, ['name', 'sex']);

调用方法后的数据处理结果

clipboard.png

5.html中使用

<table>
    <tr *ngFor="let item of data">
      <td *ngIf="item.nameRowspan != 0" [attr.rowspan]='item.nameRowspan'>{{item.name}}</td>
      <td *ngIf="item.sexRowspan != 0" [attr.rowspan]='item.sexRowspan'>{{item.sex}}</td>
      <td>{{item.age}}</td>
    </tr>
  </table>

注意:此html代码使用的是ng语法,请根据自已使用的js框架自行调整。

6.结果

clipboard.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现动态合并居中单元格,可以使用 Bootstrap Table 的自定义列插件。具体步骤如下: 1. 定义自定义列插件,实现合并单元格和居中文本的功能。示例代码如下: ```javascript $.fn.bootstrapTable.columnDefaults.mergeCells = true; $.fn.bootstrapTable.cellStyles.alignCenter = function (field, row, index, value) { return { classes: 'text-center' }; }; $.fn.bootstrapTable.columnDefaults.cellStyle = $.fn.bootstrapTable.cellStyles.alignCenter; $.extend($.fn.bootstrapTable.defaults, { onPostBody: function () { $(this).bootstrapTable('mergeCells', { field: 'fieldName', rowspan: 2, index: 0 }); } }); ``` 2. 在表格中使用自定义列插件。示例代码如下: ```html <table id="table" data-toggle="table" data-url="your/data/url" data-columns="your/data/columns"> <thead> <tr> <th data-field="fieldName" data-align="center" data-halign="center">Field Name</th> <th data-field="field1" data-align="center" data-halign="center">Field 1</th> <th data-field="field2" data-align="center" data-halign="center">Field 2</th> </tr> </thead> </table> ``` 其中,`data-field` 属性指定列的字段名,`data-align` 和 `data-halign` 属性指定水平对齐方式,`data-toggle="table"` 和 `data-url` 属性指定使用 Bootstrap Table 插件和数据源的 URL,`data-columns` 属性指定列的定义。在列定义中,可以使用自定义的插件,如 `mergeCells`。 需要注意的是,这里的 `fieldName` 需要替换为实际的字段名。另外,`rowspan` 属性可以指定合并单元格的行数,`index` 属性可以指定开始合并的行号。 希望这个回答能够帮到你。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值