项目常用jquery/easyui函数小结

项目常用jquery/easyui函数小结

背景

项目中经常需要使用到一些功能,封装、重构、整理后形成代码沉淀,在此进行分享

代码

  1. /**
  2. * @author gaohuia
  3. * @site http://www.zeroplace.cn/
  4. * 使用方式:$("#fm").serializeObject();
  5. */
  6. (function($){ //把表单序列化成对象
  7. $.fn.extend({
  8. serializeObject:function(){
  9. if(this.length>1){
  10. return false;
  11. }
  12. var arr=this.serializeArray();
  13. var obj=new Object;
  14. $.each(arr,function(k,v){
  15. if(obj[v.name]) {//处理相同名称多个键值的情况,如传递checkbox多选值
  16. obj[v.name]=obj[v.name]+‘,‘+v.value;
  17. }
  18. else {
  19. obj[v.name]=v.value;
  20. }
  21. });
  22. return obj;
  23. },
  24. extData:function(key,obj){ //扩展Dom节点上绑定的数据
  25. var dd = this.data(key);
  26. if(dd){
  27. this.data(key,$.extend({},dd,obj));
  28. }else{
  29. this.data(key,obj);
  30. }
  31. return this;
  32. },
  33. /*
  34. * 把form处理成 字符串,为对象或为数组
  35. * */
  36. encodeForm:function(type){//type:默认为字符串,1为对象,2为数组
  37. var aR = [];
  38. var aO = {};
  39. $(":input[name]",this).each(function(){
  40. if(this.value.length>0){
  41. var pushVal;
  42. switch(type){
  43. case 1:
  44. aO[this.name]=this.value;
  45. break;
  46. case 2:
  47. aR.push({name:this.name,value:this.value});
  48. break;
  49. default:
  50. aR.push([this.name,this.value].join("="));
  51. }
  52. }
  53. })
  54. return (1==type ? aO : (2==type ? aR : aR.join("&")));
  55. }
  56. });
  57. $.extend({
  58. unParam:function(str,ifdeCode){
  59. //s_proid=0202&s_unitName=KQY&s_unitAddress=&s_theirArea=&s_theirStreet=&s_contactStaff=&s_legalName=&s_objtype=jywlb_xzxk 转化为对象
  60. //参数str:需要转化的字符串,ifdeCode:true则表明需要对转化值进行decode处理
  61. var r = {};
  62. var units = str.split("&");
  63. for(var i=0;i<units.length;i++){
  64. var kv = units[i].split("=");
  65. var val = kv[1].length>0 ? kv[1] : undefined;
  66. val = (ifdeCode && val) ? decodeURIComponent(val) : val ;
  67. if(r[kv[0]]){
  68. r[kv[0]] = [r[kv[0]],val].join();
  69. }else{
  70. r[kv[0]]= val;
  71. }
  72. }
  73. return r;
  74. },
  75. /*
  76. * 登记表布局的实现,
  77. * 以body为底,一个计算大小的滚动center区域(id为center-layout),一个固定高度为30的底部区域(id为south-layout)
  78. * 参数为真时检测适用条件
  79. */
  80. applyLayout:function(ifDetect){
  81. var scrollDom = $("#center-layout")
  82. var southLayout = $("#south-layout");
  83. if(ifDetect && (scrollDom.length<=0 ||southLayout.length<=0)){
  84. return;//不适用于该布局
  85. }
  86. $("html").css({height: "100%",overflow: "hidden"});
  87. scrollDom.height($(‘body‘).parent().innerHeight() - southLayout.outerHeight()-5);
  88. $(‘tr.list_colspan‘).bind(‘click.layout‘,function(){
  89. $(this).nextUntil(‘tr.list_colspan‘).toggle(100);//点击分栏目的行会收缩/展开后面的行
  90. }).filter("[close=‘true‘]").click()
  91. }
  92. })
  93. })(jQuery);
  94. //所有的combobox都只能选择下拉
  95. if($.fn.combo){
  96. $.fn.combo.defaults.editable = false;
  97. }
  98. if($.fn.combobox){
  99. $.fn.combobox.defaults.editable = false;
  100. }
  101. if($.fn.combotree){
  102. $.fn.combotree.defaults.editable = false;
  103. }
  104. //日期框不可编辑
  105. if($.fn.datebox){
  106. $.fn.datebox.defaults.editable = false;
  107. }
  108. if($.fn.datetimebox){
  109. $.fn.datetimebox.defaults.editable = false;
  110. }
  111. if($.fn.datagrid){
  112. //给datagrid增加鼠标提示,显示其内容
  113. var oriFunc = $.fn.datagrid.defaults.view.onAfterRender;
  114. $.fn.datagrid.defaults.view.onAfterRender = function(tgt){
  115. oriFunc(tgt);
  116. $(tgt).datagrid("getPanel").find("div.datagrid-body").find("div.datagrid-cell").each(function(){
  117. var $Obj = $(this)
  118. $Obj.attr("title",$Obj.text());
  119. })
  120. }
  121. //给datagrid增加一个方法:改变列设置
  122. /*
  123. * @param {Object} jq
  124. * @param {Object} opts:设置,以数组形式提供,[{field:必需,要设置的列;title:给列设置一个新标题,width:给列设置一个新宽度}]
  125. * width似乎没有效果
  126. */
  127. $.extend($.fn.datagrid.methods, {
  128. setColumnOptions:function(jq, opts){
  129. return jq.each(function(){
  130. var grid = $(this);
  131. var p = grid.datagrid("getPanel");
  132. $.each(opts,function(optsIdx,optsVal){
  133. if(optsVal.field){
  134. var td = p.find("div.datagrid-header").find("td[field=" + optsVal.field + "]");
  135. var gridOpts = grid.datagrid("getColumnOption",optsVal.field);
  136. $.extend(gridOpts,optsVal);
  137. }
  138. if(td && optsVal.title){
  139. var oriText = td.text();
  140. var textObj = td.find("span:contains(‘" + $.trim(oriText) + "‘)");
  141. textObj.text(optsVal.title);
  142. }
  143. if(td && optsVal.width){
  144. var cell = p.find("td[field=" + optsVal.field + "]").find("div.datagrid-cell");
  145. cell.width(optsVal.width);
  146. }
  147. })
  148. });
  149. },
  150. /*
  151. * 返回特定列的标题
  152. * */
  153. getColumnTitles:function(jq,opts){
  154. var cols = $(jq).data("datagrid").options.columns;
  155. var reAry = [];
  156. if(cols.length<=0){
  157. return reAry;
  158. }
  159. for(var i=0;i<cols.length;i++){
  160. var colsi = cols[i];
  161. for(var j=0;j<colsi.length;j++){
  162. var colsij = colsi[j];
  163. reAry.push(/^all$/i.test(opts) ? colsij.title : ( colsij.hidden || colsij.chekcbox ? undefined : colsij.title));
  164. }
  165. }
  166. return reAry;
  167. }
  168. });
  169. }

示例及效果

在其他博文中整理后逐步发布

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。