如何用正确的姿势编写jQuery插件
在园子里有很多关于jQuery插件的文章,尤其 以下2篇文章:
不定义JQuery插件,不要说会JQuery
jQuery插件开发精品教程,让你的jQuery提升一个台阶
这2位大神基础讲的很清楚,在这里就不多说了,主要那个小需求来练练:
需求说明:一个标题插件,可以通过后端取数,自定义标题,自定义样式
讨论:插件通常不都是加载一下就不操作了,比如表格插件,加载数据,刷新等等。
今天练习的控件就简单给大家理理写控件的思路,(有问题,有意见大家指出。)
; (function ($) {
$.fn.cyTitle = function (options) {
//一些操作
return new cyTitle(options);
}
function cyTitle(Options) {
//这里定义插件属性
$.extend(this, Options);
this.init(Options);
}
cyTitle.prototype = {
init: function () {
//这里构建插件内容
}
}
})(jQuery)
每个插件都应该包含以上部分,这个就不多说了(上面2为大神的文章说的很清楚),从实际编写出发。 (demo)
点击加载控件列出标题(未定义标题),点击刷新更改标题(ajax取数)。
下面一步步看代码:
(本来请求txt的结果发现博客园不能上传和请求,放着runjs上也只能是js文件了。。。)
<div style="border: 1px dotted #888; width: 300px; height: 100px;">
<input type="button" class="cyTitleCore" title="load" value="加载控件" />
<input type="button" class="cyTitleCore" title="ref" value="刷新" />
<div id="div1cyTitle"></div>
</div>
<script type="text/javascript">
$(function () {
$(".cyTitleCore").click(function () {
core[$(this).attr("title")]();
})
var core = {
load: function () {
this.list = $("#div1cyTitle").cyTitle({
background: "#888"
});
},
ref: function () {
//这里直接调用插件的ref方法来刷新取数
if (this.list) {
this.list.ondatabind = function (that, e) {
e.url = "Service.js"; //指定取数的url
e.params = { //指定取数的参数
"id": (+new Date())
};
}
this.list.ref();
}
}
}
})
</script>
上面是加载控件和刷新的调用;
首先点击加载按钮可以看到是调用了插件cyTitle,并且指定背景色。先不看刷新,来看看插件到底怎么写的!
$.fn.cyTitle = function (options) {
options = options || {};
var domEl = this.get(0); //获得绑定元素的dom对象
if (!domEl) throw "未找到绑定元素!";
if (domEl["cyTitle"]) { //这里如果调用元素的dom对象上有这个控件就直接返回 (避免了在同一个元素上多次调用出BUG)
return domEl["cyTitle"];
}
options.el = domEl; //这里在构建插件的时候直接用this.el就能访问元素的dom对象
return new cyTitle(options);
}
function cyTitle(Options) {
//这里定义插件属性
$.extend(this, Options);
this.ajaxType = "get";
this.el.cyTitle = this; //把控件放着dom元素的cyTitle属性上
this.ondatabind = null; //ajax取数的绑定方法
this.init(Options);
}
cyTitle.prototype = {
init: function () {
this.load(); //加载控件
},
load: function () {
$(this.el).append("<h1>" + (this.text || "未知") + "</h1>"); //如果指定了Options.text就显示指定的内容
this.ref(); //调用ajax取数(类似与表格插件第一次加载)
},
ref: function () {
this.bgCss();
var e = {
url: null
};
this.doEvt("ondatabind", e); //这里调用前面定义的取数方法的内容(url, params)
//依次类推我们可以写绑定前(在绑定方法前面调用),绑定后(执行异步后调用) 等等
if (e.url) {
var my = this;
$[this.ajaxType](e.url, e.params, function (res) {
if (res) {
$(my.el).find("h1").text(res);
}
},'html');
}
},
doEvt: function (name, p) {
if (this[name]) {
this[name](this, p);
}
return this;
},
bgCss: function () {
$(this.el).css("background", this.background);
}
};
以上就是整个插件的内容,
优点:
- 在用一个元素上绑定n次都不会出现错误。
- 可以自定义取数,从新加载数据。
- 可以在原型上扩张,自己需要的功能。
用一个demo练习编写插件,才知道其中的乐趣,先说到这里。谢谢
实在忙,最近搞了个girhub.io博客写了个滚动条插件。有兴趣的可以看看内涵demo
如何用正确的姿势编写jQuery插件的更多相关文章
- 编写jQuery插件--实现返回顶部插件
国庆过去一周多了,作为IT界的具有严重’工作狂‘性质的宅人,居然还没走出玩耍的心情,拖了程序猿的脚后跟了.最近工作不顺,心情不佳,想吐槽下公司,想了还是厚道点,以彼之道还施彼身,觉得自己也和他们同流合 ...
- 编写jQuery插件(一)——插件约定及插件中的闭包
编写插件的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,提高开发效率和方便后期维护. 在编写jQuery插件的时候,我们一般会遵循一些约定: jQuery插件推荐命名为:jque ...
- 自己编写jQuery插件之表单验证
自己编写jQuery插件之表单验证 吐个嘈先:最近状态不咋滴,真是什么都不想干,不想上班,做什么都没动力,觉得没意思.不想这样,不想这样,快让这种情绪消失吧,忽忽.... 表单验证在项目中用的还是比较 ...
- 自己编写jQuery插件之Tab切换
自己编写jQuery插件之 Tabs切换 jquery ui 带有Tabs切换插件,但其css样式太难维护,引用的东西太多,因此就自己写了个. 起初我Html代码架子是这样的: <div cla ...
- 编写jQuery插件的方法和注意点
编写jQuery插件的方法和注意点 插件的种类 jQuery的插件主要分为3种类型. 1. 封装对象方法的插件 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的 ...
- 如何编写JQuery 插件详解
转载自:http://blog.sina.com.cn/s/blog_6154bf970101jam7.html 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jq ...
- 如何编写jQuery插件
要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...
- 编写jQuery 插件
编写jQuery Plugin,要设置默认值,并允许用户修改默认值,或者运行是传入其他值. 最终,我们得出编写一个jQuery插件的原则: 给$.fn绑定函数,实现插件的代码逻辑: 插件函数最后要 r ...
- 编写jquery插件的分享
一.类级别($.extend) 类级别你可以理解为拓展jquery类,最明显的例子是$.ajax(...),相当于静态方法. 开发扩展其方法时使用$.extend方法,即jQuery.extend(o ...
随机推荐
- Java7的新特性
原文出处:xixicat 序 本文主要讲Java7的新特性,相对于Java6而言,Java7增加了一些重要的特性,比如NIO2,不像Java6那么鸡肋,也算是一个重要的版本. 特性列表 suppres ...
- JDBC编程扩展
数据库的分类:关系型数据库.非关系型数据库.这跟数据库的发展相关.关系型数据库:mysql.oracle.sqlserver非关系型数据库:redis.memcathe.mogodb.hadoop1. ...
- pom.xml错误:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)的解决方法
pom.xml文件在添加了新的依赖后,一直报:org.codehaus.plexus.archiver.jar.Manifest.write(java.io.PrintWriter)的错误,Maven ...
- java io读写文件
java io读写文件相关阅读:http://www.cnblogs.com/wing011203/archive/2013/05/03/3056535.html public class DemoI ...
- [理论篇]一.JavaScript中的死连接`javascript:void(0)`和空连接`javascript:;`
void 运算符 void 运算符会对给定的表达式进行求值,然后直接返回 undefined void 运算符通常只用于获取 undefined 的原始值,一般使用 void(0)(等同于 void ...
- 转:实现OC与JS的简易交互
oc-->js stringByEvaluatingJavaScriptFromString,其参数是一NSString 字符串内容是js代码(这又可以是一个js函数.一句js代码或他们的组合) ...
- 2018年9月22日CCPC吉林站参赛总结
发现思维题是硬伤,代码能力是硬伤,对知识点的理解不深刻是硬伤 接下来要做的就是 1.熟悉每一个知识点,把每一个知识点和实现它的代码联系在一起学习 2.多见题,看看他们是怎么考察这些知识点的,等比赛的时 ...
- 2015/11/4用Python写游戏,pygame入门(4):获取鼠标的位置及运动
按昨天的说法,今天将开始做一个简单的游戏了. 目标是拷贝微信的飞机大战,当然拷贝完以后大家就具备自己添加不同内容的能力了. 首先是要拿到一些图片素材,熟悉使用图像处理软件和绘画的人可以自己制作,并没有 ...
- 半小时让你成为EXCEL高手
- shell脚本安装部署反向代理 监控进程 计划任务
1.编写脚本自动部署反向代理.web.nfs: 要求: I.部署nginx反向代理三个web服务,调度算法使用加权轮询: 反向代理服务器脚本配置脚本 #!/bin/bash #安装eple和nginx ...