zoukankan      html  css  js  c++  java
  • table 合并行和列

    table合并行列,以及拆分

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title></title>
        <style type="text/css">
            .select
            {
                background-color: gray;
            }
            .left
            {
                text-align: left;
            }
            .center
            {
                text-align: center;
            }
            .right
            {
                text-align: right;
            }
            table
            {
                border-collapse: collapse;
                border: none;
            }
            td
            {
                border: solid #000 1px;
                border-color: Black;
                empty-cells: show;
            }
        </style>
        <script src="js/jquery-1.7.2.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            $(function () {
                $("table tbody tr td").click(function () {
                    $(this).toggleClass("select");
                });
    
                var getColCount = function () {
                    var colspan = 0;
                    //获取选择的实际列数,包括合并的列
                    $(".select:first").parent().find(".select").each(function () {
                        if ($(this).attr("colspan") == undefined) {
                            colspan++;
                        } else {
                            colspan += parseInt($(this).attr("colspan"));
                        }
                    });
                    return colspan;
                }
                var getRowCount = function () {
                    var rowspan = 0;
                    //获取选择的实际行数,包括合并的行
                    var yIndex = $(".select:first").parent().index();
                    $("table tbody tr").has(".select").each(function () {
                        if ($(this).index() >= yIndex) {
                            var tr_first_checkd_td = $(this).find(".select:first");
                            if (tr_first_checkd_td.attr("rowspan") == undefined) {
                                rowspan++;
                                yIndex++;
                            } else {
                                rowspan += parseInt(tr_first_checkd_td.attr("rowspan"));
                                yIndex += parseInt(tr_first_checkd_td.attr("rowspan"));
                            }
                        }
                    });
                    return rowspan;
                }
                $("#merge").click(function () {
                    if (canMerge()) {
                        var colspan = getColCount();
                        var rowspan = getRowCount();
                        if (colspan != 1) {
                            $(".select:first").attr({ colspan: colspan });
                        }
                        if (rowspan != 1) {
                            $(".select:first").attr({ rowspan: rowspan });
                        }
                        $(".select:gt(0)").remove();
                        $(".select").removeClass("select");
                    } else {
                        alert("不能合并");
                    }
                });
    
                var canMerge1 = function () {
                    var rowCount = getRowCount();
                    var colCount = getColCount();
                    var totalCount = 0;
                    $(".select").each(function () {
                        var rowspan = 1;
                        var colspan = 1;
                        if ($(this).attr("rowspan") != undefined) {
                            rowspan = parseInt($(this).attr("rowspan"));
                        }
                        if ($(this).attr("colspan") != undefined) {
                            colspan = parseInt($(this).attr("colspan"));
                        }
                        totalCount += (rowspan * colspan);
                    });
    
                    return totalCount == rowCount * colCount;
                };
    
                var canMerge = function () {
                    //判断是否能合并,
                    //一,选择的td个数等于第一个和最后一个选择的td构成的方块的个数,
                    //二,所有选择的td的x和y轴的index都在第一个最后一个选中的td的index范围内
                    var first_X_Index = $(".select:first").index();
                    var first_Y_Index = $(".select:first").parent().index();
    
                    var last_X_Index = $(".select:last").index();
                    var last_Y_index = $(".select:last").parent().index();
                    var count = (last_X_Index - first_X_Index + 1) * (last_Y_index - first_Y_Index + 1);
                    var selectCount = $(".select").size();
                    //选择的td个数等于第一个和最后一个选择的td构成的方块的个数
                    var countEQ = count == selectCount;
                    //所有选择的td的x和y轴的index都在第一个最后一个选中的td的index范围内
                    var inRange = true;
                    for (var i = 0; i < $(".select").size(); i++) {
                        var x_index = $(".select").eq(i).index();
                        var y_index = $(".select").eq(i).parent().index();
                        if (x_index < first_X_Index || x_index > last_X_Index) {
                            inRange = false;
                            break;
                        } else if (y_index < first_Y_Index || y_index > last_Y_index) {
                            inRange = false;
                            break;
                        }
                    }
                    //return inRange && countEQ;
                    return true;
                };
    
                var getMin = function (colIndexs) {
                    var temp = 0;
                    for (var i = 0; i < colIndexs.length; i++) {
                        if (i == 0) {
                            temp = colIndexs[i];
                        } else {
                            if (colIndexs[i] < temp) {
                                temp = colIndexs[i];
                            }
                        }
                    }
                }
    
                $("#split").click(function () {
                    //先补齐colspan,再补齐rowspan,最后删除选中的colspan和rowspan
                    $("table tr .select[colspan]").each(function () {
                        var colspan = parseInt($(this).attr("colspan"));
                        while (colspan > 1) {
                            var td = $("<td></td>");
                            td.click(function () {
                                $(this).toggleClass("select");
                            });
                            $(this).after(td);
                            colspan--;
                        }
                    });
    
                    $("table tr .select[rowspan]").each(function () {
                        var index = $(this).index() - 1;
                        var trIndex = $(this).parent().index() + 1;
                        var rowspan = parseInt($(this).attr("rowspan"));
                        if ($(this).attr("colspan") == undefined) {
                            while (rowspan > 1) {
                                var td = $("<td></td>");
                                td.click(function () {
                                    $(this).toggleClass("select");
                                });
                                $("table tr").eq(trIndex).find("td").eq(index).after(td);
                                rowspan--;
                                trIndex++;
                            }
                        } else {
                            var colspan = parseInt($(this).attr("colspan"));
                            while (rowspan > 1) {
                                while (colspan > 0) {
                                    var td = $("<td></td>");
                                    td.click(function () {
                                        $(this).toggleClass("select");
                                    });
                                    $("table tr").eq(trIndex).find("td").eq(index).after(td);
                                    colspan--;
                                }
                                rowspan--;
                                trIndex++;
                            }
                        }
                    });
    
                    $(".select[rowspan]").removeAttr("rowspan");
                    $(".select[colspan]").removeAttr("colspan");
                    $(".select").removeClass("select");
                });
    
                $(".align").click(function () {
                    var textAlign = $(this).attr("gh-align");
                    $(".select").css("text-align", textAlign);
                    $(".select").removeClass("select");
                });
    
                $("#create").click(function () {
                    $("table tbody tr").remove();
                    var j = 1;
                    while (j < 20) {
                        var i = 1;
                        var tr = $("<tr></tr>");
                        while (i < 20) {
    
                            var td = $("<td>" + j + "." + i + "</td>");
                            td.click(function (event) {
                                if (event.ctrlKey == 1) {
                                    alert("ctrl");
                                }
                                $(this).toggleClass("select");
                            });
                            tr.append(td);
                            i++;
                        }
                        $("table").append(tr);
                        j++;
                    };
                });
            });
        </script>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <div class="tool">
                <input type="button" value="新建" id="create" />
                <input type="button" value="合并" id="merge" />
                <input type="button" value="拆分" id="split" />
                <input type="button" value="左对齐" class="align" gh-align="left" />
                <input type="button" value="居中" class="align" gh-align="center" />
                <input type="button" value="右对齐" class="align" gh-align="right" />
            </div>
            <div class="body">
                <table border="1" style=" 100%;">
                    <tr>
                        <td>
                            1
                        </td>
                        <td>
                            2
                        </td>
                        <td>
                            3
                        </td>
                        <td>
                            4
                        </td>
                    </tr>
                    <tr>
                        <td>
                            5
                        </td>
                        <td>
                            6
                        </td>
                        <td>
                            7
                        </td>
                        <td>
                            8
                        </td>
                    </tr>
                    <tr>
                        <td>
                            9
                        </td>
                        <td>
                            10
                        </td>
                        <td>
                            11
                        </td>
                        <td>
                            12
                        </td>
                    </tr>
                    <tr>
                        <td>
                            13
                        </td>
                        <td>
                            14
                        </td>
                        <td>
                            15
                        </td>
                        <td>
                            16
                        </td>
                    </tr>
                </table>
            </div>
        </div>
        </form>
    </body>
    </html>

     程序员的基础教程:菜鸟程序员

  • 相关阅读:
    Struts整合Spring3时注意
    Android组件通讯之BroadcastReceiver应用闹钟服务
    Android组件通讯之Pending Intent与Notification
    Android组件通讯之Service的基础绑定
    Android网络编程之Web Service初步(服务器端搭建)
    Android数据存储之ContentProvider调用联系人数据
    Android网络编程之Socket方式上传对象序列化文件(服务器端)
    Android组件通讯之可跨进程的远程Service调用
    Android网络编程之Web Service初步(客户端)
    Android网络编程之Socket方式上传对象序列化文件(客户端)
  • 原文地址:https://www.cnblogs.com/guohu/p/4535040.html
Copyright © 2011-2022 走看看