jquery 插件闭包
2019独角兽企业重金招聘Python工程师标准>>>
1. 对JQuery自身的扩展插件
顾名思义,这种插件是对JQuery自身的方法库进行扩展的。在使用的时候通过$.MethodName()的方式直接使用。
插件代码示例:
$.extend({
handleTableUI :
function
(table){
varthisTable = $(
"#"
+ table);
$(thisTable).find(
"tr"
).bind(
"mouseover"
,
function
() {
$(
this
).css({ color:
"#ff0011"
, background:
"blue"
});
});
$(thisTable).find(
"tr"
).bind(
"mouseout"
,
function
() {
$(
this
).css({ color:
"#000000"
, background:
"white"
});
});
}
});
示例说明:当要对JQuery自身进行扩展的时候,需要采用$.extend();的形式进行开发,JQuery的extend()方法为我们提供了扩展JQuery自身的方式,在extend()方法中,我们采用{...}的形式编写具体的方法体。其中,最重要的是要定义我们自己的扩展方法,如示例中的handleTableUI。定义的方式是:方法名 : function(参数){ 方法体 }。通过此种方式我们就可以定义JQuery自己的扩展方法,而且这个方法可以在web页面通过智能提示显示出来。页面中调用的代码如下:
<scripttype=
"text/javascript"
>
$(document).ready(
function
() {
$.handleTableUI(
"newTable"
);
});
</script>
对HTML标记或页面元素进行扩展
使用这种插件的扩展方式,在使用此插件时,需要首先引用经过JQuery包装的页面元素,如:$("#tableId").Method()。
插件代码示例:
(
function
($){
$.fn.tableUI =
function
(options){
var
defaults = {
evenRowClass:
"evenRow"
,
oddRowClass:
"oddRow"
,
activeRowClass:
"activeRow"
}
var
options = $.extend(defaults, options);
this
.each(
function
(){
var
thisTable=$(
this
);
//添加奇偶行颜色
$(thisTable).find(
"tr:even"
).addClass(options.evenRowClass);
$(thisTable).find(
"tr:odd"
).addClass(options.oddRowClass);
//添加活动行颜色
$(thisTable).find(
"tr"
).bind(
"mouseover"
,
function
(){
$(
this
).addClass(options.activeRowClass);
});
$(thisTable).find(
"tr"
).bind(
"mouseout"
,
function
(){
$(
this
).removeClass(options.activeRowClass);
});
});
};
})(jQuery);
这里重点说一下这一句
var options= $.extend(defaults, options);
这里其实就是合并多个对象为一个。这里就是,如果你在调用的时候写了新的参数,就用你新的参数,如果没有写,就用默认的参数。
当要对页面元素进行JQuery扩展时,需要采用(function($){...})(JQuery);的方式进行开发。在“...”处,定义我们自己的方法,定义方式是:$.fn.自定义方法名 = function(参数){...};的形式定义扩展方法的具体内容。在页面调用的时候不同于对JQuery自身的扩展。具体调用代码如下:
3. 不要用在页面显式调用JQuery的方法,而是通过直接添加JQuery插件脚本引用,即可实现对该插件的调用。
一般,如果需要用到一些全局的JQuery插件,即:插件的方法不需要显式调用,而是引用脚本即可;同时,这种插件一般对整个Web页面起到全局配置或设置的作用,如:对<body></body>内部的内容进行整体布局,此时可以采用脚本引用的方式实现。
插件代码示例:
(
function
($) {
$.tableUI = { set:
function
() {
varthisTable = $(
"table"
);
$(thisTable).find(
"tr"
).bind(
"mouseover"
,
function
() {
$(
this
).css({ color:
"#ff0011"
, background:
"blue"
});
});
$(thisTable).find(
"tr"
).bind(
"mouseout"
,
function
() {
$(
this
).css({ color:
"#000000"
, background:
"white"
});
});
}
};
//此处需要进行自调用
$(
function
() {
$.tableUI.set();
});
})(jQuery);
示例说明:如果上面这段代码在my.plugin.js文件中,那么,我们只需要在页面上添加对此脚本文件的引用即可,引用方式为:<scriptsrc="Scripts/my.plugin.js"type="text/javascript"></script>,当然,在所有要用到JQuery的地方,需要首先添加对JQuery库脚本的引用。在引用型插件的代码中,最主要的就是在插件中要主动调用自己所写的插件方法,上面代码中有注释的地方。否则,我们写的插件代码将不会起作用。
二、插件的基本要点
在编写插件的时候,我们需要记住这些要点,虽然不照着这么做不会影响使用,但是要是你的插件是不规范的代码,那何必花苦心思去写插件。
jQuery插件的文件名推荐命名为jquery.[插件名].js,以免和其他JavaScript库插件混淆。例如命名为jquery.color.js。
所有的对象方法都应当附加到jQuery.fn对象上,而所有的全局函数都应当附加到jQuery对象本身上。
在插件内部,this指向的是当前通过选择器获取的jQuery对象,而不像一般的方法那样,例如click()方法,内部的this指向的是DOM元素。
可以通过this.each来遍历所有元素。
所有的方法或函数插件,都应当以分号结尾,否则压缩的时候可能出现问题。为了更稳妥些,甚至可以在插件头部先加上一个分号,以免他人的不规范代码给插件带来影响。具体方法可以参考后面的代码。
插件应该返回一个jQuery对象,以保证插件的可链式操作。除非插件需要返回的是一些需要获取的量,例如字符串或者数组等。
避免在插件内部使用$作为jQuery对象的别名,而应使用完整的jQuery来表示。这样可以避免冲突。当然,也可以利用闭包这种技巧来回避这个问题,使插件内部继续使用$作为jQuery的别名。很多插件都是这么做的,本教程也会利用这种形式。
OK,以上就是我对JQuery插件的几点理解,希望对大家能有所帮助,也希望大家在使用的过程中能及时反馈相关信息。
转载于:https://my.oschina.net/u/876290/blog/391429
jquery 插件闭包相关推荐
- 自己动手开发jQuery插件
因为工作需要,所以这几天琢磨了一下关于jQuery插件开发的问题,经过一天鏖战,终于完成自己动手做的第一个jQuery插件,对于俺这种见了css就蛋疼菊紧的人来说,一天时间8小时,保守估计有5个小时在 ...
- jquery插件分类与编写详细讲解
1. 插件种类 插件其实就是对现有的方法(或者叫函数)做一个封装,方便重用提高开发效率. jQeury主要有2种类型 1)实例对象方法插件 开发能让所有的jquery实例对象都可以调用的方法. ...
- 如何编写一个Jquery插件
首先我们来搞清楚一些关于Jquery插件的知识: 一.插件的种类: 封装对象方法的插件 这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的一种插件 封装全局函数的 ...
- jquery插件之选项卡
jQuery插件编写 首先来一个简拓展jQuery对象的方法 <body > <p>23</p> <script src="js/jquery-1. ...
- [置顶] 编写自己的JQUERY插件
如何编写自己的jquery插件 Jquery的插件主要分为三类: 1.封装对象方法的插件:大部分插件都是封装对象的插件 2.封装全局函数的插件:将独立的函数添加到jquery的命名空间之下.Jquer ...
- 写JQuery 插件 什么?你还不会写JQuery 插件
http://www.cnblogs.com/Leo_wl/p/3409083.html 前言 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui ...
- 用一个案例介绍jQuery插件的使用和写法
我们在做web的时候都会用到很多jQuery插件,这些插件可以很方便的使用.但对于初学者来说想要修改插件中的一些功能,或者想要自定义插件却不是容易的事情.自己也刚好在学习这部分的知识,这里用一个案例来 ...
- 10条建议让你创建更好的jQuery插件(转载)
为了避免重复造轮子,自己手动开发jquery 插件,让小组其他成员可以直接使用.学习开发中,看到Phillip Senn 写的 关于jquery 插件开发注意10点,转载之! ------------ ...
- 让你更好的使用jQuery插件
在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了.使 ...
最新文章
- Linux使用imagemagick的convert命令压缩图片、节省服务器空间
- Oracle错误:ORA-27121: unable to determine size of shared memory segment
- git版本库--常用命令
- linux系统安装xhprof,LNMP部署laravel与xhprof安装使用
- PHP生产一个验证码图片,PHP使用GD库生成验证码图片,实现图片验证
- 数据库:mysql内置功能-函数
- webbrowser只对浏览器外应用程序以及在_常用浏览器大盘点!
- TOGAF架构学习总结
- 盛大 传奇 的网游启示录
- 【Adobe Premiere Pro 2020】pr模板下载和pr使用模板创建视频、pr调色说明、pr全景视频编辑说明、pr无缝转场特效制作流程、pr保存预设效果和pr使用预设效果
- w ndows7如何清理垃圾,Win7系统清理:如何清理Win7系统盘垃圾
- Python+Cartopy绘制中国地图
- git合并——衍合于挑拣(cherry-pick)——只合并某个commit
- LTE中资源数量映射用到的PRB数量(TB,CQI,MCS,PRB)
- 好奇心和求知欲是什么
- vue run dev报错 缺少package.json文件、missing dev 命令 解决办法
- 虚拟地址,虚拟地址空间, 交换分区
- FreeRDP 2.0 for Windows 编译
- 内存屏障 Memory Barriers
- 如何给自己的网站添加 gitalk 评论系统
热门文章
- 别为iptables日志付出太多-一种Linux防火墙优化方法
- jackson 实体转json json字符串转实体
- asyncio协程与并发
- python 学习DAY03
- 使用支持向量机训练mnist数据
- Objective-C之category
- XCTF-高手进阶区:Web_php_unserialize(详解)
- 《光棍节程序员闯关秀》闯关攻略
- codeigniter mysql -1_在CodeIgniter中使用现有的MySQL数据库
- 台式计算机防盗锁怎么安装,防盗门锁怎么拆装 防盗门锁拆装步骤【详细介绍】...