在 datatable 中自定义数据添加弹出框

在 datatable 中自定义数据添加弹出框

1. js 代码


/* 这个点击可以长时间有效 */
$('#myTable tbody').on("click", "i[data-toggle='ykenan']", function () {
		
	/* 得到 datatable 的总行数 */
	var recordsTotal = $myTable.DataTable().page.info().recordsTotal;
	/* 得到 datatable 的全部数据 */
	var fnGetData = $myTable.dataTable().fnGetData();

	/* 得到点击时候的 table 表格的第几行 */
    var table_x = $(this).parents("td").parent().parent().find("tr").index($(this).parents("td").parent()[0]);
	/* 得到点击时候的 table 表格的第几列 */
    var table_y = $(this).parents("td").index();

	/* 得到点击时候的返回数据加载到 datatable 中真正数据的第几行 */
    var index_x = $myTable.DataTable().row($(this).parents("td").parents("tr")).index();
	/* 得到点击时候的返回数据加载到 datatable 中真正数据的第几列 */
    var index_y = $myTable.DataTable().column($(this).parents("td")).index();

	/* 查看 table 和数据索引的关系, 这个用来解决排序导致 table 中的索引和真实数据中的索引不一样的问题 */
    console.log("table: " + table_x + "," + table_y + ";" + "data: " + index_x + "," + index_y + ";");

    var $_span = $(this).parents("td").children("span");
    /* 判断是否添加条件, 根据实际情况写 */
    if ($_span.length === 1) {
        /* 得到点击需要的 i 标签 */
        var $i = $(this);
        /* 对 $i 添加父标签 */
        $i.wrap("<span></span>");
        /* 设置 $i 父标签的属性 */
        $i.parents("span").attr("style", "position: relative;");
        /* 在 $i 后面添加标签, 一边存放内容 */
        $i.after("<span></span>");
        /* 得到添加 $i 后面的标签来存放内容 */
        var $i1 = $(this).parents("td").children("span").children("span");
        /* 先设置 $i1 的标签的属性以便于得到高度数据 */
        $i1.attr("style", "position: absolute;padding: 5px 20px;width: max-content;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;max-width: 500px;");
        /* 添加内容, 这样才会有高度 */
        // $i1.html($myTable.DataTable().column(index_y).data()[index_x]);

		/* 添加需要弹出框的列的数据 */
        if(index_y === 1) {
            $i1.html(fnGetData[index_x].one);
        } else if(index_y === 2) {
            $i1.html(fnGetData[index_x].two);
        } else if(index_y === 3) {
            $i1.html(fnGetData[index_x].three);
        } else if(index_y === 4) {
            $i1.html(fnGetData[index_x].four);
        } else if(index_y === 5) {
            $i1.html(fnGetData[index_x].five);
        } else if(index_y === 6) {
            $i1.html(fnGetData[index_x].six);
        } else if(index_y === 7) {
            $i1.html(fnGetData[index_x].seven);
        }

        /* 得到该页的第几个分页, 索引从 0 开始 */
        var page = $myTable.DataTable().page.info().page;
        /* 得到分页的总页数 */
        var pages = $myTable.DataTable().page.info().pages;

        if(page !== pages - 1) {
            /* 判断高度进行设置从设属性 y = 381 - 30(x), y = 381 - 30(11 - x) */
            if (table_x <= 5) {
                /* 上面向下显示 */
                var height_one = 381 - 25 * table_x;
                /* 自动显示高度 */
                if ($i1.height() <= height_one) {
                    if (index_y < 5) {
                        $i1.attr("style", "position: absolute; top: -8px;left: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;");
                    } else if (index_y >= 5) {
                        $i1.attr("style", "position: absolute; top: -8px;right: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;");
                    }
                } else {
                    if (index_y < 5) {
                        $i1.attr("style", "position: absolute; top: -8px;left: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;height:" + height_one + "px;overflow-y: auto;");
                    } else if (index_y >= 5) {
                        $i1.attr("style", "position: absolute; top: -8px;right: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;height:" + height_one + "px;overflow-y: auto;");
                    }
                }
            } else {
                /* 下面向上显示 */
                var height_two = 381 - 25 * (11 - table_x);
                /* 自动显示高度 */
                if ($i1.height() <= height_two) {
                    if (index_y < 5) {
                        $i1.attr("style", "position: absolute; bottom: -8px;left: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;");
                    } else if (index_y >= 5) {
                        $i1.attr("style", "position: absolute; bottom: -8px;right: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;");
                    }
                } else {
                    if (index_y < 5) {
                        $i1.attr("style", "position: absolute; bottom: -8px;left: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;height:" + height_two + "px;overflow-y: auto;");
                    } else if (index_y >= 5) {
                        $i1.attr("style", "position: absolute; bottom: -8px;right: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;height:" + height_two + "px;overflow-y: auto;");
                    }
                }
            }
        }else {
            if ($i1.height() <= height_one) {
                if (index_y < 5) {
                    $i1.attr("style", "position: absolute; top: -8px;left: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;");
                } else if (index_y >= 5) {
                    $i1.attr("style", "position: absolute; top: -8px;right: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;");
                }
            } else {
                if (index_y < 5) {
                    $i1.attr("style", "position: absolute; top: -8px;left: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;height:112px;overflow-y: auto;");
                } else if (index_y >= 5) {
                    $i1.attr("style", "position: absolute; top: -8px;right: 25px;background-color: #117A8B;padding: 5px 20px;width: max-content;box-shadow: 12px 12px 27px rgba(0, 0, 0, 0.05), 12px 12px 3px rgba(0, 0, 0, 0.1);z-index: 1000;white-space: pre-wrap; word-break: break-all; overflow-wrap: break-word;color: #fff;max-width: 500px;height:112px;overflow-y: auto;");
                }
            }
        }

        $i1.hide();
        $i1.show(300);
        $i.toggleClass("fa-plus-square fa-minus-square");

        /* 添加 $1 的点击事件 */
        $i.click(function () {
            $(this).toggleClass("fa-plus-square fa-minus-square");
            if ($(this).hasClass("fa-minus-square")) {
                $i1.show(300);
            } else {
                $i1.hide(250);
            }
        });
    }
});/* 点击结束 */

好的,以下是一个基于Bootstrap的自定义封装弹出表格代码,可以用于展示数据或者进行数据选择等操作: HTML代码: ```html <!-- 弹出模态 --> <div class="modal fade" id="tableModal" tabindex="-1" role="dialog" aria-labelledby="tableModalLabel" aria-hidden="true"> <div class="modal-dialog modal-lg" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="tableModalLabel">选择数据</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <table id="dataTable" class="table table-striped table-bordered"> <thead> <tr> <th>列1</th> <th>列2</th> <th>列3</th> </tr> </thead> <tbody> <!-- 数据行会通过JS动态生成 --> </tbody> </table> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button> <button type="button" class="btn btn-primary" id="selectBtn">选择</button> </div> </div> </div> </div> ``` JS代码: ```javascript // 默认选数据行索引 var selectedRowIndex = -1; // 打开弹出表格 function openTableModal(data, selectedIndex) { // 清空表格 $("#dataTable tbody").empty(); // 生成表格数据行 for (var i = 0; i < data.length; i++) { var row = $("<tr></tr>"); for (var j = 0; j < data[i].length; j++) { var cell = $("<td></td>").text(data[i][j]); row.append(cell); } $("#dataTable tbody").append(row); } // 设置默认选行,并高亮显示 if (selectedIndex >= 0 && selectedIndex < data.length) { selectedRowIndex = selectedIndex; $("#dataTable tbody tr").eq(selectedRowIndex).addClass("table-primary"); } // 显示弹出 $("#tableModal").modal("show"); } // 选择数据行 function selectTableRow(rowIndex) { // 取消之前选的行的高亮显示 $("#dataTable tbody tr").eq(selectedRowIndex).removeClass("table-primary"); // 设置当前选的行,并高亮显示 selectedRowIndex = rowIndex; $("#dataTable tbody tr").eq(selectedRowIndex).addClass("table-primary"); } // 获取选数据行 function getSelectedTableRow() { var rowData = []; if (selectedRowIndex >= 0) { var row = $("#dataTable tbody tr").eq(selectedRowIndex); row.find("td").each(function() { rowData.push($(this).text()); }); } return rowData; } // 绑定选择按钮点击事件 $("#selectBtn").click(function() { var rowData = getSelectedTableRow(); if (rowData.length > 0) { // TODO: 处理选数据行的逻辑 console.log(rowData); } // 关闭弹出 $("#tableModal").modal("hide"); }); ``` 使用示例: ```javascript // 打开弹出表格,data为二维数组形式的表格数据,selectedIndex为默认选的行索引 openTableModal([ ["数据1-1", "数据1-2", "数据1-3"], ["数据2-1", "数据2-2", "数据2-3"], ["数据3-1", "数据3-2", "数据3-3"], ], 1); ``` 注意,以上代码仅供参考,具体实现应根据自己的需求进行调整和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值