编辑代码

//JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
$.extend($.fn.datagrid.methods,{
    //根据索引获取行dom元素
    getTr:function(jq,index){
        let opts=$.data(jq[0],'datagrid').options;
        return opts.finder.getTr(jq[0],index);
    },
    //获取选择的行dom元素
    getSelectedTr:function(jq){
        let opts=$.datagrid(jq[0],'datagrid').options;
        return opts.finder.getTr(jq[0],null,'selected')
    },
    updateCell:function(jq,option){
        let tr=jq.datagrid("getTr",option.index);
        let td=tr.find("td[field="+option.field+"]>div.datagrid-cell");
        td.text(option.value);
    },
    unMergeCell:function(jq,options){
        return jq.each(function(){
            let tr=jq.datagrid("getTr",options.index);
            let td=tr.find('td[field='+options.field+']');
            let rowspan=td.attr("rowspan")||1;
            td.attr('rowspan',1);
            while(rowspan--){
                tr=tr.next();
                tr.find('td[field='+options.field+']').show();
            }
        })
    },
    autoMergeCellsGroup:function(jq,param){
        return jq.each(function(){
            let target=$(this),
                fields=params.fields,
                filterObj=param.filterObj,
                spareB=param.spareB;
            if(!fields){
                fields=target.datagrid('getColumnFields');
            }
            let rows=target.datagrid('getRows');
            let group=filterObj||target.datagrid("options").group;
            let temp={}
            rows.forEach(function(item,index){
                if(spareB&&item.spareB!=spareB){
                    return;
                }
                if(filterObj&&item[filterObj.field]!=filterObj.fieldValue){
                    return;
                }
                fields.forEach(function(field){
                    if(!temp[field]){
                        item._index=index;
                        temp[field]=[[item]];
                        return false;
                    }
                    let len=temp[field].length;
                    let arr=temp[field][len-1];
                    let last=arr[arr.length-1];
                    if(last&&last[group[field]]==item[group[field]]&&last[field]==item[field]){
                        arr.push(item)
                    }else{
                        item._index=index;
                        temp[field].push([item])
                    }
                })
            });
            $.each(temp,function(field,column){
                column.forEach(function(arr){
                    let last=arr[0];
                    let len=arr.length;
                    target.datagrid('mergeCells',{
                        index:last._index,
                        field:field,
                        rowspan:len
                    });
                })
            })

        })
    },
    bind:function(jq,options){
        let event=option.length==3?option[2]:'click';
        let selector=option[0];
        let fn=option[1];
        jq.parent().on(event,selector,function(e){
            let rowIndex=$(this).closest('tr').index();
            let row=jq.datagrid('getRows')[rowIndex];
            fn.call(this,row,rowIndex,e);
        })
    }
})