table的td合并

表格合并单元格插件

js网盘位置:http://pan.baidu.com/s/1nvv3seP

1、用法:最低要求:jq1.8

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>导出table</title>
<link rel="stylesheet" href="../../common/bootstrap/3.3.7/css/bootstrap.min.css">  
<script src="../../common/js/jquery/1.11.1/jquery.min.js"></script>
<script src="../../common/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="table-responsive">
  <table class="table table-bordered" id="content_info">
    <caption>导出Excel头信息</caption>
    <thead>
      <tr>
        <th>列头1</th>
        <th>列头2</th>
        <th>列头3</th></tr>
    </thead>
    <tbody>
      <tr>
        <td>A</td>
        <td>B1</td>
        <td>C1</td></tr>
      <tr>
        <td>A</td>
        <td>B2</td>
        <td>C2</td></tr>
      <tr>
        <td>A3</td>
        <td>B3</td>
        <td>C3</td></tr>
      <tr>
        <td>A3</td>
        <td>B4</td>
        <td>C4</td></tr>
    </tbody>
  </table>
</div>
</body>
<script type="text/javascript" src="../../common/layer/3.0.3/layer.js"></script>
<script type="text/javascript" src="../../common/js/common/tablesMergeCell.js"></script>
<script type="text/javascript">
$(function(){
    $('#content_info').tablesMergeCell({
        cols: [0,1]//合并的列从0开始,按内容合并,相同的内容自动合并
    });
});

</script>
</html>

2、tablesMergeCell.js

;(function($) {
    $.fn.tablesMergeCell = function(options) {
        var defaultsettings= {
            automatic:true,
            cols: null,        // 用数组表示列的索引,从0开始,然后根据指定列来处理(合并)相同内容单元格
            rows: null
        };
        var opts = $.extend(defaultsettings, options);
        return this.each(function() {
            var cols = opts.cols,
                rows = opts.rows;
            if(rows==null){
                for ( var i = cols.length - 1; cols[i] != undefined; i--) {
                    tablesMergeCell($(this), cols[i]);
                }
            }else{
                for ( var i = cols.length - 1,k=opts.rows.length-1; cols[i] != undefined; i--,k--) {
                    tablesMergeCell($(this), cols[i],k);
                }
            }

            dispose($(this));
        });

        // 如果对javascript的closure和scope概念比较清楚, 这是个插件内部使用的private方法
        function tablesMergeCell($table, colIndex,rowIndex) {
            $table.data('col-content', '');     // 存放单元格内容
            $table.data('col-rowspan', 1);      // 存放计算的rowspan值 默认为1
            $table.data('col-td', $());         // 存放发现的第一个与前一行比较结果不同td(jQuery封装过的), 默认一个"空"的jquery对象
            $table.data('trNum', $('tbody tr', $table).length);     // 要处理表格的总行数, 用于最后一行做特殊处理时进行判断之用
            // 我们对每一行数据进行"扫面"处理 关键是定位col-td, 和其对应的rowspan
            $('tbody tr', $table).each(function(index) {
                var $tr = $(this);
                // td:eq中的colIndex即列索引
                var $td = $('td:eq(' + colIndex + ')', $tr);
                var currentContent = $td.html();
                if(opts.automatic){     // 内容
                    // 第一次时走此分支
                    if ($table.data('col-content') == '') {
                        $table.data('col-content', currentContent);
                        $table.data('col-td', $td);
                    } else {
                        // 上一行与当前行内容相同
                        if ($table.data('col-content') == currentContent) {
                            addRowspan();   // 上一行与当前行内容相同则col-rowspan累加, 保存新值
                        }else{
                            newRowspan();   // 上一行与当前行内容不同
                        }
                    }
                }else{      // 指定
                    if(opts.rows.length>0){
                        if(opts.rows[0].length==undefined){
                            for(var i=0; i<opts.rows.length; i++){
                                customRowspan(opts.rows[i],opts.rows.length);
                            }
                        }else{
                            for(var i=0; i<opts.rows[rowIndex].length; i++){
                                customRowspan(opts.rows[rowIndex][i],opts.rows[rowIndex].length);
                            }
                        }
                    }
                }
                function customRowspan(val,len){
                    if(index==val){
                        if ($table.data('col-content') == '') {
                            if(currentContent==''){
                                currentContent = true;
                            }
                            $table.data('col-content', currentContent);
                            $td.attr('rowspan', len);
                        }else{
                            $td.hide();
                        }
                    }
                }
                function addRowspan(){
                    var rowspan = $table.data('col-rowspan') + 1;
                    $table.data('col-rowspan', rowspan);
                    // 值得注意的是 如果用了$td.remove()就会对其他列的处理造成影响
                    $td.hide();
                    // 最后一行的情况比较特殊一点
                    // 比如最后2行 td中的内容是一样的, 那么到最后一行就应该把此时的col-td里保存的td设置rowspan
                    if (++index == $table.data('trNum')) {
                        $table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
                    }
                }
                function newRowspan(){
                    // col-rowspan默认为1, 如果统计出的col-rowspan没有变化, 不处理
                    if ($table.data('col-rowspan') != 1) {
                        $table.data('col-td').attr('rowspan', $table.data('col-rowspan'));
                    }
                    // 保存第一次出现不同内容的td, 和其内容, 重置col-rowspan
                    $table.data('col-td', $td);
                    $table.data('col-content', $td.html());
                    $table.data('col-rowspan', 1);
                }
            });
        }
        // 同样是个private函数 清理内存之用
        function dispose($table) {
            $table.removeData();
        }
    };

})(jQuery);

转载于:https://my.oschina.net/wugong/blog/872929

<think>好的,用户的问题是关于如何在HTML和CSS中合并表格单元格的边框,特别是使用border-collapse来实现。首先,我需要回顾之前的对话,确保这次回答符合用户的需求。用户之前询问了JSF中如何通过bean控制inputText的显示,现在转向了CSS表格边框的问题。这可能意味着他们在开发Web应用时遇到了布局问题,特别是表格样式的调整。需要确保回答准确且易于理解。首先,用户提到了“合并单元格边框”,这通常指的是消除单元格之间的间隙,使边框看起来像合并成一个。根据引用[1]中的内容,border-collapse和border-spacing是关键属性。需要详细解释这两个属性的作用,以及如何使用它们。 接下来,我需要分步骤说明如何实现边框合并。首先,创建基本表格结构,然后应用CSS样式。重点放在border-collapse:collapse;上,同时提到border-spacing的用途,但注意在border-collapse为collapse时,border-spacing可能无效,这点需要明确指出。 然后,示例代码是必要的。用户可能需要一个可以直接复制粘贴的代码片段,所以给出一个简单的HTML和CSS示例,展示应用border-collapse后的效果。同时,说明每个步骤的作用,比如设置表格宽度、边框样式等。另外,用户可能混淆了合并边框和合并单元格(colspan/rowspan),所以需要区分这两个概念。引用[1]中提到的是边框合并,而合并单元格是HTML属性,这点需要明确说明,避免用户混淆。 可能的高级技巧部分,可以提到如何为特定边添加边框,或者处理嵌套表格的情况,但需要保持简洁,避免信息过载。同时,引用之前的引用内容,如引用[3]中的borderColorDark,但可能与此问题关联不大,所以可能不需要深入。 最后,生成的相关问题需要与CSS表格相关,比如其他边框样式、响应式表格设计等,帮助用户进一步学习。确保问题与当前主题相关,并且有逻辑连贯性。检查是否所有数学表达式都正确使用了LaTeX格式,但在这个问题中可能用不到数学公式,所以可以忽略。但需要确保代码块正确格式化,使用正确的语法高亮。总结回答结构:问题分析、实现步骤、示例代码、注意事项、高级技巧、相关问题。确保每个部分清晰,用户能够逐步跟随操作,解决实际问题。</think>### 如何在HTML/CSS中合并表格单元格边框? #### 核心方法:使用`border-collapse`属性 在HTML表格中实现边框合并,主要依赖CSS的`border-collapse`属性。该属性控制相邻单元格边框的显示方式,通过设置为`collapse`可合并为单一边框[^1]。 --- ### 实现步骤 #### 1. 基础表格结构 ```html <table class="merge-border"> <tr> <td>单元格1</td> <td>单元格2</td> </tr> <tr> <td>单元格3</td> <td>单元格4</td> </tr> </table> ``` #### 2. 关键CSS设置 ```css .merge-border { border-collapse: collapse; /* 合并边框的关键设置 */ width: 100%; } .merge-border td { border: 1px solid #000; /* 统一单元格边框样式 */ padding: 8px; } ``` #### 3. 效果对比 - 未设置`border-collapse`时:每个单元格保持独立边框,间距由`border-spacing`控制[^1] - 设置`border-collapse: collapse`后:相邻边框合并为单线,间距自动消除 --- ### 注意事项 1. **优先级问题**:表格级设置会覆盖单元格级边框设置 2. **边框继承**:合并后实际显示的边框宽度/颜色由冲突解决规则决定 3. **与`border-spacing`关系**:当`border-collapse: collapse`生效时,`border-spacing`属性将失效[^1] --- ### 高级技巧 #### 合并特定边框 ```css /* 仅合并垂直方向边框 */ .merge-border { border-collapse: separate; border-spacing: 0 10px; } /* 隐藏水平边框 */ .merge-border td { border-top: none; border-bottom: none; } ``` #### 嵌套表格处理 ```css .nested-table { border-collapse: separate; border: 2px solid blue; } .nested-table table { border-collapse: collapse; margin: 5px; } ``` --- ### 与合并单元格的区别 | 特性 | 边框合并 | 单元格合并 | |---------------|--------------------------|-------------------------| | 实现方式 | CSS (`border-collapse`) | HTML (`colspan/rowspan`)| | 视觉效果 | 消除边框间隙 | 合并单元格区域 | | 数据关联 | 不影响数据布局 | 改变表格数据结构 | | 典型应用场景 | 美化表格外观 | 创建复杂表头 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值