View Code
1 (function($){ 2 if(!Array.prototype.indexOf){ 3 Array.prototype.indexOf=function(obj,index){ 4 var start =index||0; 5 if(start<0){ 6 start=this.length+start; 7 } 8 for(;this[start];start++){ 9 if(this[start]===obj){ 10 return start; 11 } 12 } 13 return -1; 14 } 15 } 16 var setCookie=function(key,val){document.cookie=(key+"="+escape(val)+";");}, 17 getCookie=function(key){ 18 var cookie=document.cookie; 19 if(cookie.length>0){ 20 var start=cookie.indexOf(key+"="),end; 21 if(start!=-1){ 22 end=cookie.indexOf(";",String(key).length+1); 23 if(end==-1){end=cookie.length;} 24 return unescape(cookie.substring(start+String(key).length+1,end)); 25 } 26 } 27 return ""; 28 }, 29 filterCol=function(defCol,srcCol){ 30 var i=srcCol.length; 31 while(i--){ 32 defCol.indexOf(srcCol[i])==-1&&(srcCol.splice(i,1)); 33 } 34 return !!srcCol.length?srcCol:defCol; 35 }, 36 getHideCol=function(uuid){ 37 var start, 38 end, 39 hideCols=getCookie("hideCol"); 40 if(hideCols){ 41 if((start=hideCols.indexOf(uuid+"_"))!=-1){ 42 end=hideCols.indexOf(",",start+String(uuid).length+2); 43 if(end==-1){ 44 end=hideCols.length; 45 } 46 return hideCols.substring(start+String(uuid).length+1,end).split("@"); 47 } 48 } 49 return []; 50 51 }, 52 addMenuCookie=function(uuid,fieldName){ 53 var hideCols=getCookie("hideCol"), 54 hideColArr=getHideCol(uuid); 55 if(hideCols){ 56 if(hideColArr.length>0){ 57 hideColArr.push(fieldName); 58 hideCols=hideCols.replace(new RegExp(uuid+"_[^\,]+$"),uuid+"_"+hideColArr.join("@")); 59 }else{ 60 hideCols+=(","+uuid+"_"+fieldName); 61 } 62 }else{ 63 hideCols=(uuid+"_"+fieldName); 64 } 65 setCookie("hideCol",hideCols); 66 }, 67 delMenuCookie=function(uuid,fieldName){ 68 var hideCols=getCookie("hideCol"), 69 hideColArr=getHideCol(uuid), 70 i=hideColArr.length; 71 if(hideCols){ 72 if(hideColArr.length>0){ 73 while(i--){hideColArr[i]==fieldName&&(hideColArr.splice(i,1));} 74 if(hideColArr.length>0){ 75 hideCols=hideCols.replace(new RegExp(uuid+"_[^\,]+$"),uuid+"_"+hideColArr.join("@")); 76 }else{ 77 hideCols=hideCols.replace(new RegExp(uuid+"_[^\,]+\,?$"),""); 78 } 79 setCookie("hideCol",hideCols); 80 } 81 } 82 }, 83 createMenu=function(jq,options,hideCol){ 84 var menuHtml="", 85 col=options.col, 86 i=col.length; 87 while(i--){ 88 if(hideCol.indexOf(col[i])!=-1){ 89 menuHtml+=""; 96 jq.after(menuHtml); 97 $("#"+options.uuid).menu({ 98 onClick:function(item){ 99 var fieldName=$(item.target).attr("fieldName");100 if(item.iconCls=="icon-ok"){101 if($("#"+options.uuid+" .icon-ok").length==1){102 $.messager.alert("警告","需至少保留一列","warning");103 return;104 }105 jq.datagrid("hideColumn",fieldName);106 $("#"+options.uuid).menu("setIcon",{target:item.target,iconCls:"icon-empty"});107 addMenuCookie(options.uuid,fieldName);108 }else{109 jq.datagrid("showColumn",fieldName).datagrid("fitColumns");110 $("#"+options.uuid).menu("setIcon",{target:item.target,iconCls:"icon-ok"});111 delMenuCookie(options.uuid,fieldName);112 113 }114 }115 });116 if($("#"+options.uuid).height()>options.height){117 $("#"+options.uuid).css("height",options.height);118 if($.browser.msie&&$.browser.version==6){$("#"+options.uuid).css("overflow-y","auto");119 }else{$("#"+options.uuid).css("overflow","auto");}120 }121 jq.datagrid("options")._onHeaderContextMenu=jq.datagrid("options").onHeaderContextMenu;122 jq.datagrid("options").onHeaderContextMenu=function(e){e.preventDefault();$("#"+options.uuid).menu("show",{left:e.pageX,top:e.pageY});}123 jq[0].customColumn=true;124 125 };126 $.extend($.fn.datagrid.methods,{127 /**128 * 让datagrid的列拥有本地化隐藏显示功能(本地保存设置):129 * 对象参数说明:130 * {131 * 参数名 类型 描述 例 默认值132 * col array 让哪些列拥有本地化隐藏显示功能 $("#t1").datagrid("customColumn",{col:["col1","col2"]}) 所有列133 * height number 当超过此高度时锁定高度 $("#t1").datagrid("customColumn",{height:100}) 300134 * }135 * 调用方式:136 * 一:不传入任何参数(此时所有的列都拥有本地化功能)137 * $("#t1").datagrid("customColumn");138 * $("#t1,#t2").datagrid("customColumn");139 * 二:传入一个对象(替换第一个jquery的默认值)140 * $("#t1").datagrid("customColumn",{col:[col1,col2],height:300});141 * $("#t1,#t2").datagrid("customColumn",{col:[col1,col2],height:300});//t1的默认被覆盖,t2还是默认142 * 三:传入一个字符串(替换第一个jquery的属性)143 * $("#t1").datagrid("customColumn","col1,col2"]);144 * $("#t1,#t2").datagrid("customColumn","col1,col2"]);//t1的列被定制,t2还是默认145 * 四:传入一个数字(替换第一个jquery的属性)146 * $("#t1").datagrid("customColumn",300);147 * $("#t1,#t2").datagrid("customColumn",300);//t1的高度被覆盖,t2还是默认148 * 五:传入一个对象数组,对象需包含一个数组属性col(没有对应的则默认所有列) 149 * $("#t1").datagrid("customColumn",[{col:["col1","col2"]}]);//只有t1的col1,col2列拥有本地化隐藏显示功能150 * $("#t1,#t2").datagrid("customColumn",[{col:["col1","col2"]}]);//t1的col1,col2列拥有本地化隐藏显示功能,t2的所有列都拥有本地化隐藏显示功能151 * $("#t1,#t2").datagrid("customColumn",[{col:["col1","col2"]},{col:[col3,col4]}]);//t1的col1,col2列拥有本地化隐藏显示功能,t2的col3,col4列拥有本地化隐藏显示功能152 */153 customColumn:function(jq,param){154 return jq.each(function(i){155 if(this.customColumn){156 return true;157 }158 var $grid=$(this),159 defCol=$grid.datagrid("getColumnFields").concat($grid.datagrid("getColumnFields",true)),160 options={col:defCol,height:300};161 if($.isArray(param)&&$.isPlainObject(param[i])){162 $.extend(options,param[i]);163 }164 if(i==0){165 if(typeof param=="string"){166 $.extend(options,{col:param.split(",")});167 }168 if($.isNumeric(param)){169 $.extend(options,{height:param});170 }171 if($.isPlainObject(param)){172 $.extend(options,param);173 }174 }175 options.col=filterCol(defCol,options.col);176 for(var name in this){177 /^jQuery/.test(name)&&(options.uuid=this[name]);178 }179 createMenu($grid,options,getHideCol(options.uuid));180 });181 },182 unCustomColumn:function(jq){183 return jq.each(function(){184 var uuid,185 $grid=$(this),186 hideCols=getCookie("hideCol");187 for(var name in this){188 /^jQuery/.test(name)&&(uuid=this[name]);189 }190 if($("#"+uuid).length==1){191 delete this.customColumn;192 $("#"+uuid).remove();193 $grid.datagrid("options").onHeaderContextMenu=jq.datagrid("options")._onHeaderContextMenu||function(){};194 if(hideCols){195 hideCols=hideCols.replace(new RegExp(uuid+"_[^\,]+\,?$"),"");196 setCookie("hideCol",hideCols);197 }198 }199 });200 }201 });202 })($);"+jq.datagrid("getColumnOption",col[i]).title+""; 90 jq.datagrid("hideColumn",col[i]); 91 }else{ 92 menuHtml+=""+jq.datagrid("getColumnOption",col[i]).title+""; 93 } 94 } 95 menuHtml+="
posted on 2013-01-29 11:02 阅读( ...) 评论( ...)