`

动态生成表格并不丢失原表格内容

阅读更多

目的是为了根据行列,例如根据颜色尺码,动态生成表格,并且表格变化的时候保存原来的值。为了方便写成了jquery插件的形式。

 

/**
 * @author zhangtan
 * @email ztreal@gmail.com
 * @since  2011-1-17
 * 动态生成表格
 * @version 1.0.4(2011-1-17)
 * @jquery  1.4.2
 */
(function($) {
    //基本参数  根据哪2个div内的checkbox在那个div内生成table
    //行列来源和生成表格目标 整合虚拟产品和实物产品共用同一js
    var defaults = {
        row: 'row',
        line: 'line',
        target: 'target',
        isXvNi:true

    };

    //存放变动前表格的行列条件和值
    function value(x, y, y2, v) {
        this.x = x;
        this.y2 = y2;
        this.y = y;
        this.v = v;
    }

    $.fn.createTable = function(options) {
        ///<summary>
        /// create table by row and line use div[id=line,row] in div[id=target]
        ///</summary>
        options = $.extend(defaults, options);
        var row = $("#" + options.row).find("input[type=checkbox][checked=true]");
        var line = $("#" + options.line).find("input[type=checkbox][checked=true]");
        var valueList = [];
        //如果表格内容有值,获取其条件和值,放入数组中。
        var tempvalue = $("#" + options.target).find("input[value]").each(function(iii) {
            var y = $(this).parent().parent().prevAll("tr").length + 1;
            var x = $(this).parent("td").prevAll("td").length;
            if ($.browser.mozilla) {
                valueList[iii] = new value($("#" + options.target).find("tr").eq(0).find("th").eq(x).html(), $(this).parent().parent().parent().find("tr").eq(y).find("td").eq(0).html(), $(this).parent().parent().parent().find("tr").eq(y).find("td").eq(1).html(),'<input type="text" value='+$(this).val()+'><\/input>'+$(this).parent().text());
            } else {
                valueList[iii] = new value($("#" + options.target).find("tr").eq(0).find("th").eq(x).html(), $(this).parent().parent().parent().find("tr").eq(y).find("td").eq(0).html(), $(this).parent().parent().parent().find("tr").eq(y).find("td").eq(1).html(), $(this).parent().html());
            }
        });

        var title = [];
        if (row.length >= 1) {
            title[0] = $("#" + options.row).find("span[istitle]").html();
        }
        if (line.length >= 1) {
            title[title.length] = $("#" + options.line).find("span[istitle]").html();
        }
        //根据是否为虚拟产品判断是否加入特定内容。
        if (options.isXvNi === false) {
            title[title.length] = '*折扣后价格';
            title[title.length] = '折扣';
            title[title.length] = '*库存';
        }else{
            title[title.length] = '*第三方产品编号';
            title[title.length] = '成本价';
            title[title.length] = '*市场价';
            title[title.length] = '*折扣后价格';
            title[title.length] = '折扣';
            title[title.length] = '*最大购买数量';
        }
        var head = "";
        var tr = "";
        $.each(row, function(i) {
            $.each(line, function(ii) {
                var td = "";
                td = td + "<td>" + $(line[ii]).next("label").html() + "</td>";
                td = td + "<td>" + $(row[i]).next("label").html() + "</td>";
                if (options.isXvNi === false) {
                    td = td + '<td><input type="text"><\/input>元</td><td><input type="text"><\/input>%</td><td><input type="text"><\/input>件</td>';
                }else{
                    td = td + '<td><input type="text"><\/input></td><td><input type="text"><\/input>元</td><td><input type="text"><\/input>元</td> <input type="text"><\/input>元</td><td><input type="text"><\/input>%</td><td><input type="text"><\/input>张</td>';
                }
                tr = tr + "<tr>" + td + "</tr>";
            });
        });
        //生成表格第一行表头
        for (var t = 0;t<title.length;t++) {
            head = head + "<th>" + title[t] + "</th>";
        }
        title = "<table><thead><tr>" + head + "</tr></thead></table>";
        $(this).empty();
        $(this).append(title);
        $(this).append(tr);
        var newValueList = [];
        //还原原来已经有的值
        for (var val=0;val<valueList.length;val++) {
            for (var i = 1; i <= $("#" + options.target).find("tr").eq(0).find("th").length; i++) {
                if (valueList[val].x == $("#" + options.target).find("tr").eq(0).find("th").eq(i).html()) {
                    var xx = i;
                    for (var a = 1; a < $("#" + options.target).find("tr").length; a++) {
                        if ($("#" + options.target).find("tr").eq(a).find("td").eq(0).html() == valueList[val].y && $("#" + options.target).find("tr").eq(a).find("td").eq(1).html() == valueList[val].y2) {
                            $("#" + options.target).find("tr").eq(a).find("td").eq(xx).html(valueList[val].v);
                        }
                    }
                }
            }
        }

    };


})(jQuery);
 
分享到:
评论

相关推荐

    DELPHI 表格控件DBGridEh史上最全使用资料(101页)

    一、 DBGridEh(增强型表格组件)功能详解.....................................................................4 二、应用实例.................................................................................

    易语言5.11

    3 修改高级表格支持库 新增单元格列类型:#表格常量 不可编辑列表型 参见“高级表格 置列类型 ”方法 4 修改高级表格支持库 增加了“边框”属性和“客户区背景颜色”属性 同时隐藏了原“客户区背景颜色 ”方法 5 ...

    python学生管理系统(基于mysql)-大作业/毕业设计

    下一步是创建储藏信息的数据库,这一点并不需要麻烦您来操作,程序第一次运行时会自动创建数据库,如果有相关提示,请同意并略过它。 注意:使用过程中请不要删除本文件夹中的任何文件,否则极有可能导致程序报错...

    好管家CRM软件

    支持入库出库的多单打印,出库10项勾选即可一次性生成单据,不遗忘不丢失好整理。 支持客户信息分类以及实时跟进记录,达到明确客户重要程度,不混淆遗忘客户需求。 支持智能记忆功能,不怕断电、死机等,出现异常...

    好管家(CRM)软件 v7.0.0.1.zip

    支持入库出库的多单打印,出库10项勾选即可一次性生成单据,不遗忘不丢失好整理。 支持客户信息分类以及实时跟进记录,达到明确客户重要程度,不混淆遗忘客户需求。 支持智能记忆功能,不怕断电、死机等,出现异常...

    好管家(CRM)软件

    支持入库出库的多单打印,出库10项勾选即可一次性生成单据,不遗忘不丢失好整理。 支持客户信息分类以及实时跟进记录,达到明确客户重要程度,不混淆遗忘客户需求。 支持智能记忆功能,不怕断电、死机等,出现异常...

    易语言程序免安装版下载

    注意:静态编译后的易语言EXE和DLL之间不能再共享“某些”句柄或资源,这一点和原动态连接时的程序行为不能保持一致,使用时请务必设法避免此类用法(MYSQL支持库我们作了特别处理)。 注意:静态编译后常量数据...

    西华大学不挂科V2.3

    3、第一次使用软件时,软件会在运行目录中自动生成“选课号.txt”(已存在则不自动生成),用 于记录选课号,请勿随意删除,否则将会丢失已经记录的选课号(“清空”按钮也会清掉所有选课号记录),选课号.txt文件...

    LeadBBS v2.10 论坛.rar

    21.发表的帖子内容一直保存,不用因错误而需要返回重填而引起的数据丢失 22.上传的附件可以支持多个插入到文章中. 23.上传附件大小限制,并自动判断是否是图像格式 24.引入GBLSDK,自动判断上传的100多种图像格式,...

    asp.net知识库

    直接从SQL语句问题贴子数据建表并生成建表语句的存储过程 从SQL中的一个表中导出HTML文件表格 获取數据库表的前N条记录 几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle ...

    西华大学不挂科V2.3(版本2.3.0.2)

    3、第一次使用软件时,软件会在运行目录中自动生成“选课号.txt”(已存在则不自动生成),用 于记录选课号,请勿随意删除,否则将会丢失已经记录的选课号(“清空”按钮也会清掉所有选课号记录),选课号.txt文件...

    LeadBBS v2.05 论坛.rar

    21.发表的帖子内容一直保存,不用因错误而需要返回重填而引起的数据丢失 22.上传的附件可以支持多个插入到文章中. 23.上传附件大小限制,并自动判断是否是图像格式 24.引入GBLSDK,自动判断上传的100多种图像格式,...

    File文件登记簿(通用打印版)

     (2)此标题不是表格内容,则按照无表格线的一行一列的表格来看待,以直尺量出表格最宽处为16厘米,则在单元格宽度处填入1600,特别注意,计量单位是以十分之一毫米为一个单位,高度35毫米则填入350...

    优影文件整理工具_下载店数据整理

    1、重复文件删除(数据指纹相同):内容重复文件会显示表格中,在表格中点右键会弹出[删除菜单],可以批量删除或一个一个文件删除重复的文件。 2、高频字屏蔽:高频字通常可以认为是歌手名(周杰伦、刘德华等)也...

    File文件登记簿软件

     (2)此标题不是表格内容,则按照无表格线的一行一列的表格来看待,以直尺量出表格最宽处为16厘米,则在单元格宽度处填入1600,特别注意,计量单位是以十分之一毫米为一个单位,高度35毫米则填入350...

    Log Explorer for SQL Server v4.22 含注册机

    执行Drop Table和Truncate Table命令虽然会被SQLServer记录到日志文件中,但是并不记录被删除的数据。你可以使用LogExplore提供的功能来恢复这些数据。LogExplore提供两种机制来恢复被Drop或者Truncate的数据。 1、...

    Log Explorer for SQL Server v4.22

    执行Drop Table和Truncate Table命令虽然会被SQLServer记录到日志文件中,但是并不记录被删除的数据。你可以使用LogExplore提供的功能来恢复这些数据。LogExplore提供两种机制来恢复被Drop或者Truncate的数据。 1、...

    Log Explorer4.2帮助文档

    执行Drop Table和Truncate Table命令虽然会被SQLServer记录到日志文件中,但是并不记录被删除的数据。你可以使用LogExplore提供的功能来恢复这些数据。LogExplore提供两种机制来恢复被Drop或者Truncate的数据。 1、...

    sql2000 Log Explorer4.2(含注册码)+汉化

    执行Drop Table和Truncate Table命令虽然会被SQLServer记录到日志文件中,但是并不记录被删除的数据。你可以使用LogExplore提供的功能来恢复这些数据。LogExplore提供两种机制来恢复被Drop或者Truncate的数据。 1、...

    浅谈大数据及大数据分析.doc

    但是,电子表格的激增导致组织不得不面临"多个事 实版本"的困境,也就是说,无法确定您所拥有的电子表格是否是包含了最新数据和逻辑 的正确版本。而且,一旦用户丢失了笔记本电脑或电子表格出现损坏,这些数据及其逻...

Global site tag (gtag.js) - Google Analytics