八戒爱嫦娥

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
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="<div style='width:100px;position:absolute;' id='"+options.uuid+"'>",
 85                 col=options.col,
 86                 i=col.length;
 87             while(i--){
 88                 if(hideCol.indexOf(col[i])!=-1){
 89                     menuHtml+="<div iconCls='icon-empty' fieldName='"+col[i]+"'>"+jq.datagrid("getColumnOption",col[i]).title+"</div>";
 90                     jq.datagrid("hideColumn",col[i]);
 91                 }else{
 92                     menuHtml+="<div iconCls='icon-ok' fieldName='"+col[i]+"'>"+jq.datagrid("getColumnOption",col[i]).title+"</div>";
 93                 }
 94             }
 95             menuHtml+="</div>";
 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})            300
134          *    }
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 })($);

 

posted on 2013-01-29 11:02  八戒爱嫦娥  阅读(792)  评论(0)    收藏  举报