如何使用克隆jQuery脚本添加/ del行?

时间:2013-08-14 14:41:51

标签: jquery clone

AddButton(克隆)代码:

$.fn.btnAddRow=$.fn.tableAutoAddRow=function(options,func){
        var callBack;
        if (typeof options=="object")
            callBack=(func && $.isFunction(func)) ? func :null; 
        else
            callBack=(options && $.isFunction(options)) ? options :null; 
        options=$.extend({
            maxRow:null,
            ignoreClass:null,
            rowNumColumn:null,
            autoAddRow:false,
            oddRowCSS:null,
            evenRowCSS:null,
            inputBoxAutoNumber:false,
            inputBoxAutoId:false,
            displayRowCountTo:null,
            maxRowAttr:null,
            hideFirstOnly:null,
            showFirstOnly:null,
            cloneClass:null,
            evenRowAttr:null,
            oddRowAttr:null,
            rowCountAttr:null,
            autoNumAttr:null,
            autoIdAttr:null
        },options);
        this.each(function(){
            var tbl,etbl,cloneClass;
            if(typeof options.cloneClass=="string" && options.cloneClass!=""){
                if ($(this).closest("table").find("."+options.cloneClass).size()>0){
                    tbl=$(this).closest("table");
                    cloneClass=options.cloneClass;
                }else if ($(this).closest("."+options.cloneClass).size()>0){
                    tbl=$(this).closest("."+options.cloneClass).closest("table");
                    cloneClass=options.cloneClass;
                } else{
                    tbl=(this.nodeName.toLowerCase()=="table")?$(this):$(this).closest("table");
                }
            }else{
                tbl=(this.nodeName.toLowerCase()=="table")?$(this):$(this).closest("table");
            }
            if(options.maxRowAttr && typeof $(this).attr(options.maxRowAttr)!="undefined") 
                options.maxRow=$(this).attr(options.maxRowAttr);
            if(options.oddRowAttr && typeof $(this).attr(options.oddRowAttr)!="undefined")
                options.oddRowCSS=$(this).attr(options.oddRowAttr);
            if(options.evenRowAttr && typeof $(this).attr(options.evenRowAttr)!="undefined")
                options.evenRowCSS=$(this).attr(options.evenRowAttr);
            if(options.rowCountAttr && typeof $(this).attr(options.rowCountAttr)!="undefined")
                options.displayRowCountTo=$(this).attr(options.rowCountAttr);
            if(options.autoNumAttr && typeof $(this).attr(options.autoNumAttr)!="undefined")
                options.inputBoxAutoNumber=$(this).attr(options.autoNumAttr);
            if(options.autoIdAttr && typeof $(this).attr(options.autoIdAttr)!="undefined")
                options.inputBoxAutoId=$(this).attr(options.autoIdAttr);
            if(tbl.size()>0){
                if(typeof tbl.data(className)==="undefined" || tbl.data(className)===null){
                    etbl=new ExpandableTable(tbl,options.maxRow);
                    if(this.nodeName.toLowerCase()!="table")
                        $(this)
                            .addClass("addRow"+etbl.seed)
                            .data(className,etbl);
                }else{
                    if(this.nodeName.toLowerCase()!="table")
                        $(this)
                            .addClass("addRow"+tbl.data(className).seed)
                            .data(className,tbl.data(className));
                }
                if($(this).data(className)) {
                    etbl=$(this).data(className);
                } 
                etbl.maxRow=options.maxRow;
                etbl.maxRow=options.maxRow;
                etbl.ignoreClass=options.ignoreClass;
                etbl.rowNumColumn=options.rowNumColumn;
                etbl.oddRowCSS=options.oddRowCSS;
                etbl.evenRowCSS=options.evenRowCSS;
                etbl.autoAddRow=options.autoAddRow;
                etbl.inputBoxAutoNumber=options.inputBoxAutoNumber;
                etbl.displayRowCountTo=options.displayRowCountTo;
                etbl.hideFirstOnly=options.hideFirstOnly;
                etbl.showFirstOnly=options.showFirstOnly;
                if(typeof cloneClass=="string" && etbl.cloneClass!=cloneClass){
                    etbl.cloneClass=cloneClass;
                } else {
                    etbl.cloneClass="cloneRow"+etbl.seed;
                }
                etbl.updateRowCount();
                etbl.addCallBack=callBack;
            };
        });
        for(var i=0;i<ExpandableTableList.length;i++){
            if(!ExpandableTableList[i].goLive){
                ExpandableTableList[i].live();
            }
        }
    };

DelButton代码:

$.fn.btnDelRow=function(options,func){
        var callBack;
        if (typeof options=="object")
            callBack=(func && $.isFunction(func)) ? func :null; 
        else
            callBack=(options && $.isFunction(options)) ? options :null; 
        options=$.extend({
            cloneClass:null
        },options);

        this.each(function(){
            var etbl,tbl,cloneClass;
            if ($(this).closest("."+options.cloneClass).size()>0){
                tbl=$(this).closest("."+options.cloneClass).closest("table");
                cloneClass=options.cloneClass;
            }else{
                tbl=$(this).hide().closest("table");
            }
            if(tbl.size()>0){
                if(typeof tbl.data(className)==="undefined" || tbl.data(className)===null){
                    etbl=new ExpandableTable(tbl);
                    $(this)
                        .addClass("delRow"+etbl.seed)
                        .data(className,etbl);
                }else{
                    $(this)
                        .addClass("delRow"+tbl.data(className).seed)
                        .data(className,tbl.data(className));
                }
                if($(this).data(className)) {
                    etbl=$(this).data(className);
                    etbl.deleteCallBack=callBack;
                } 
                if(!(typeof etbl.cloneClass=="string" 
                    && etbl.cloneClass!="")){
                    etbl.cloneClass="cloneRow"+etbl.seed;
                    $(this).closest("tr").addClass("cloneRow"+etbl.seed);
                } else if(typeof cloneClass=="string"){
                    etbl.cloneClass=cloneClass;
                } else {
                    etbl.cloneClass="cloneRow"+etbl.seed;
                    $(this).closest("tr").addClass("cloneRow"+etbl.seed);
                }
                etbl.update();
            }
        });
        for(var i=0;i<ExpandableTableList.length;i++){
            if(!ExpandableTableList[i].goLive){
                ExpandableTableList[i].live();
            }
        }
    };

该插件可以正常工作,但如果我想在克隆之前删除第一个选项,它就无法工作。要删除,我需要克隆它,然后删除原始和克隆的。

我怎么能有一个选项来检查是否没有克隆,是否有机会清除而不是删除?

table.js

0 个答案:

没有答案