4、jQuery面向对象之简单的插件开发
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 = this function Student(){ }
Student.a = Person;
Student.a();//this就是Student
var json = {
a:Person
}
json.a();//this就是json对象 //可以利用call和 apply函数改变this的指向
Person.call(json);//Person.call(json)==json.Person
Person.apply(Student);//Student.Person();
4、jQuery面向对象之简单的插件开发的更多相关文章
- 使用dom元素和jquery元素实现简单增删改的练习
软件开发实际就是数据的增删改查,javascript前端开发也不例外.今天学了jquery框架的简单使用.于是用它实现简单的增删改,接着也用原始的javascript实现同样的功能,以便看出jquer ...
- 使用Struts2和jQuery EasyUI实现简单CRUD系统(转载汇总)
使用Struts2和jQuery EasyUI实现简单CRUD系统(一)——从零开始,ajax与Servlet的交互 使用Struts2和jQuery EasyUI实现简单CRUD系统(二)——aja ...
- php+jquery+ajax+json简单小例子
直接贴代码: <html> <title>php+jquery+ajax+json简单小例子</title> <?php header("Conte ...
- 原生JS取代一些JQuery方法的简单实现
原生JS取代一些JQuery方法的简单实现 下面小编就为大家带来一篇原生JS取代一些JQuery方法的简单实现.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 1.选 ...
- 3、jQuery面向对象
1.首先介绍callback.js对ajax进行了封装 function ajaxFunction(){ var xmlHttp; try{ // Firefox, Opera 8.0+, Safar ...
- jQuery学习之路(7)- 用原生JavaScript实现jQuery的某些简单功能
▓▓▓▓▓▓ 大致介绍 学习了妙味,用原生的JavaScript实现jQuery中的某些部分功能 定义自己的函数库lQuery ▓▓▓▓▓▓ $()选择器的实现 jQuery是面向对象的,所以自己编写 ...
- MYSQL、PHP基础、面向对象基础简单复习总结
一.MYSQL 1.配置MySql 第一步安装服务器(apache). 第二部安装MySql界面程序 2 ...
- 以最简单的登录为例,诠释JS面向对象的简单实例
JavaScript,是前端开发人员必须会的一门技术,从JS演变出来的有很多框架,先说说几个热门的框架吧: JQuery:这个技术必须会,如果不会,那一定要会查api,知道怎么写,要看得懂英文文档,这 ...
- sql+PHP基础+面向对象基础简单总结
一.MYSQL 1.配置MySql 第一步安装服务器(apache). 第二部安装MySql界面程序 2 ...
随机推荐
- obj文件中的关键字
obj文件使用的关键字 关键字 含义 v 表示本行指定一个顶点,此关键字后跟着3个单精度浮点数,分别表示该顶点的X.Y.Z坐标值 vt 表示本行指定一个纹理坐标,此关键字后跟着两个单精度浮点数,分别表 ...
- 踩坑记之字体图标在webpack中
首先介绍一个还不错的字体图标库: font-awesome 是在发现bootstrap在npm下载后没有font包以后重新找的字体库,内容还挺丰富的,好像还有动态图,感兴趣的可以看一下 我的环境是we ...
- docker 部署netcore 的关键语句
网站容器:docker run -it --name myTestWeb -p 8080:80 -v /mnt/hgfs/my_share/core/website/:/website microso ...
- ceph安装过程
创建群集[2019-03-20 18:35:04,232][ceph_deploy.conf][DEBUG ] found configuration file at: /home/sceph/.ce ...
- frida的js脚本处理正则的一个小坑
frida的server模式需要python支持,所以js脚本中的正则需要多一次转义 比如匹配"/proc/{数字pid}" server: paramPath.match(&qu ...
- 用Python实现一个大数据搜索引擎
用Python实现一个大数据搜索引擎 搜索是大数据领域里常见的需求.Splunk和ELK分别是该领域在非开源和开源领域里的领导者.本文利用很少的Python代码实现了一个基本的数据搜索功能,试图让大家 ...
- ASP.NET Core MVC/WebAPi 模型绑定探索 转载https://www.cnblogs.com/CreateMyself/p/6246977.html
前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...
- pdf兼容问题不能正常预览
刚开始以为是这个PDF文件过大导致的 发现其他更大的文件也能正常显示 考虑到PDF的兼容问题 由于导出的PDF格式不兼容导致,如果有这种情况,可以尝试用word2016打开pdf文件,再导出成pdf.
- python 使用[[v]*n]*m遇到的问题
需求:想通过python生成m行n列的矩阵 方式1:(有问题) data = [[0]*3]*4 #4行3列 data 输出 [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, ...
- HDU3449_Consumer
这个是一个背包的变形题,很值得仔细体味 大致题意: 这个比普通背包多一个限制:再选每一类物品之前必须要先购买一个篮子来装,篮子有一定的价格,其他就和背包是一样的了 思路: 为了能够体现篮子的价值,我们 ...