4、jQuery面向对象之简单的插件开发
来源:互联网 发布:电极编程的切削参数 编辑:程序博客网 时间:2024/06/02 03:53
1、alert例子
(function($){ $.alert = function(msg){ window.alert(msg); } $.fn.alert = function(msg){ window.alert(msg); }})($);$().ready(function(){ $.alert("aaaaa"); $("body").alert("bbbb");});
2、继承
(function(jQuery){ jQuery.fn.myextend = function(json){ for(var i in json){ jQuery.fn[i] = json[i]; } } jQuery.myextend = function(json){ for(var i in json){ jQuery[i] = json[i]; } }})(jQuery);$().ready(function(){ $("body").myextend({ aa:function(){ alert("aa"); } }); $("body").aa();});
3、myeach
(function(jQuery){ jQuery.fn.myeach = function(callback){ var array = $(this); for(var i=0;i<array.length;i++){ //this代表当前正在遍历的对象 callback.call($(array[i]),$(array[i])); } } /** * @param {Object} obj 可以来自于利用jquery的选择器创建的jquery对象,也可以来自于一个数组(来源于后台) * @param {Object} callback */ jQuery.myeach = function(obj,callback){ var array = obj; for(var i=0;i<array.length;i++){ //this代表当前正在遍历的对象 callback.call($(array[i]),$(array[i])); } }})(jQuery);$().ready(function(){ $("div").myeach(function(){ //this代表当前正在遍历的div对象 alert($(this).text()); }); $.myeach($("div"),function(e){ alert($(e).text()); });});
4、jquery开发的querytable
1、首先封装一个命名空间的组件
(function($){ $.nameSapce = function(namespaceString){ var temp = [];//声明了一个空的数组 var array = namespaceString.split("."); for (var i = 0; i < array.length; i++) { temp.push(array[i]); /** * 把多个json对象添加了window上 */ eval("window." + temp.join(".") + "={}"); } }})($);
2、封装对table的增删改查
(function($){ /** * 这里需要一些方法 * 查询方法 * 修改的方法 * 删除的方法 */ $.fn.GridPanel = { /** * 初始化事件 */ initEvent:function(){ /** * 给table中的所有的超级链接添加事件 */ $("#"+$.fn.GridPanel.defaultConfig.table_id).delegate("a","click",function(){ if($(this).text()=="删除"){ $.fn.GridPanel.method.deleteRow.call(this); }else if($(this).text()=="修改"){ } }) /** * 当点击一个td的时候,触发td的click事件 * * "td:not(:has(a))" 不含有超级链接的td */ $("#"+$.fn.GridPanel.defaultConfig.table_id).delegate("td:not(:has(a))","click",function(){ if($(this).children("input").length==0){//td下面没有文本框 var value = $(this).text(); $(this).empty();//把该元素下面的所有的子子元素清空 var $txt = $.fn.GridPanel.method.createText(); $(this).append($txt); $txt.focus();//聚焦 $txt.attr("value",value);//赋值 } }) /* * 添加td中的文本框失去焦点的事件 */ $("#"+$.fn.GridPanel.defaultConfig.table_id).delegate("input","blur",function(){ $.fn.GridPanel.method.updateCell.call(this); }) }, /** * 默认的配置 */ defaultConfig:{ table_id:'', url:'', /** * 特定的操作要往后台传递的参数 */ option:{ /** * 查询操作 */ query:{ }, /** * 删除操作 */ del:{ }, /** * 修改操作 */ update:{ } }, /** * <th field="name">姓名</th> <th field="description">描述</th> <th field="del">删除</th> <th field="update">修改</th> */ fields:'', filedUpdate:'', filedDelete:'' }, /** * 对表格操作的所有的方法全部放在method中 */ method:{ /** * 从后台加载数据,利用ajax技术形成表格 */ createTable:function(config){ /** * 1、请求后台,把数据传到客户端 */ //把客户端传递过来的参数覆盖掉默认的配置 true为深度迭代 $.extend(true,$.fn.GridPanel.defaultConfig,config); /** * 执行initEvent方法 */ $.fn.GridPanel.initEvent(); $.post($.fn.GridPanel.defaultConfig.url,$.fn.GridPanel.defaultConfig.option.query,function(data){ /** * data: * [ * { * pid:1, * name:'aa', * description:'aa' * }, * { * pid:2, * name:'bb', * description:'bb' * } * ] */ //把后台回调过来的数据转化成json对象 var array = eval("("+data+")"); /** * 遍历array数组中的每一个元素 * 第二个参数为回调,在该函数中创建tr */ $.each(array,function(){ /** * 每遍历一次,调用一次createTR方法 * 当createTR方法调用完毕以后创建了一个tr,再把tr追加到tbody上 */ $("#"+$.fn.GridPanel.defaultConfig.table_id+" tbody").append( $.fn.GridPanel.method.createTR.call(this)); }); }); }, /** * 修改其中的一个单元格 */ updateCell:function(){ /** * this为当前的文本框 */ var updateObj = $(this); var pid = $(this).parent().parent().data("id"); var value = $(this).val(); //文本框的值 var $td = $(this).parent();//文本框的父节点td var item = $td.attr("item");//要修改的列名 $.post($.fn.GridPanel.defaultConfig.url,{ id:pid, item:item, value:value, method:'update' },function(data){ updateObj.remove(); $td.text(value); }); }, /** * 给table添加一行 */ addRow:function(){ }, /** * 删除指定的行 */ deleteRow:function(){ var delObj = $(this); if (window.confirm("您确认要删除吗")) { /* * 因为在查询的时候把id利用该tr放入到了jQuery的缓存中,所以在这里可以提取到 */ $.fn.GridPanel.defaultConfig.option.del.pid = $(this).parent().parent().data("id"); $.post($.fn.GridPanel.defaultConfig.url, $.fn.GridPanel.defaultConfig.option.del, function(data){ delObj.parent().parent().remove(); }); } }, /** * 创建一个tr */ createTR:function(){ /** * this为{ pid:2, name:'bb', description:'bb' } */ var jsonObj = this; var $tr = $("<tr/>"); /** * 相当于把key为id,value为jsonObj.pid加在了jQuery.cache中 * 可以利用$tr.data("id")获取到值 */ $tr.data("id",jsonObj.pid); /** * 因为$.fn.GridPanel.defaultConfig.fields的数组的长度就是多少列 */ $.each($.fn.GridPanel.defaultConfig.fields,function(){ /** * this代表正在遍历的每一个元素就是fields中的每一个元素 */ $tr.append($.fn.GridPanel.method.createTD.call(this,jsonObj)); }); return $tr; }, /** * 创建一个td * jsonObj * { pid:2, name:'bb', description:'bb' } */ createTD:function(jsonObj){ /** * this <th field="name">姓名</th> */ if($(this).attr("field")==$.fn.GridPanel.defaultConfig.filedDelete){//如果是删除 return $("<td/>").append($.fn.GridPanel.method.createA("删除")); }else if($(this).attr("field")==$.fn.GridPanel.defaultConfig.filedUpdate){//如果是修改 return $("<td/>").append($.fn.GridPanel.method.createA("修改")); }else{//不是超级链接 return $("<td/>").attr("item",$(this).attr("field")).text(jsonObj[$(this).attr("field")]); } }, createA:function(text){ return $("<a/>").css("cursor","pointer").text(text); }, createText:function(){ return $("<input type='text'/>"); } } };})($);
3、如何使用
$().ready(function(){ /** * 1、创建命名空间 */ $.nameSapce("com.itheima12.Person"); /** * 2、把GridPanel中的内容复制给了com.itheima12.Person */ $.extend(com.itheima12.Person,$.fn.GridPanel); /** * 3、调用方法 */ com.itheima12.Person.method.createTable({ table_id:'usertable', url:'../PersonServlet', fields:$("#usertable *[field]"), option:{ query:{ method:'query' }, del:{ method:'deleteById', pid:'' }, update:{ method:"update" } }, filedUpdate:'update', filedDelete:'del' });});
5、对于this的讲解
/** * 任何一个对象都有可能成为任何一个对象的属性 */function Person(){ alert(this);}Person();//window = thisfunction Student(){ }Student.a = Person;Student.a();//this就是Studentvar json = { a:Person}json.a();//this就是json对象//可以利用call和 apply函数改变this的指向Person.call(json);//Person.call(json)==json.PersonPerson.apply(Student);//Student.Person();
阅读全文
0 0
- 4、jQuery面向对象之简单的插件开发
- JQuery--JQuery面向对象编程快速入门-插件开发
- jQuery插件开发3之简单实例
- 面向对象编写jQuery插件
- 开发简单jquery插件
- 简单jQuery插件开发
- jQuery简单插件开发
- jquery对象级别插件的开发
- 一个简单的jQuery插件开发实例
- 最简单的jquery插件开发示例
- C#之面向对象的简单总结
- 面向对象封装插件思想 jquery
- jQuery之插件开发
- 简单的面向对象
- jQuery 简单插件开发代码
- JQuery插件之jQuery-easing的简单使用
- 我的插件开发学习4--html5之Websocket对象
- 学习--jquery 自定义插件 面向对象 -- 模拟 jquery EasyUi的 自定义 alert + confirm
- 2、jQuery操作Dom(过滤器与选择器)
- Android studio 提示 module not specified
- 3、jQuery面向对象
- C/C++跨模块释放内存
- Vue PDF预览
- 4、jQuery面向对象之简单的插件开发
- WriteFile导致程序崩溃的问题
- 看过就懂内联函数inline
- 5、java操作xml,dom4j
- 6、基于highcharts实现的线性拟合,计算部分在java中实现,画的是正态概率图
- 《Spring5官方文档》19. 视图技术
- 7、c++版,在大学学的编程基础知识
- ArcGIS——GIS中的坐标系
- ruby, rvm homebrew,pods