jQuery开发插件的两种方式
最近挺多人写jQuery的,都是关于jQuery扩展方面的,使用方面的讲的比较多,但是关于详细的一个基础的过程讲的比较少一点,做web开发的基本上都会用到jQuery,本人就根据jQuery的使用经验讲讲插件开发。jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数是属于jQuery命名空间的函数),如果将jQuery看成一个类,那么就相当于给jQuery类本身添加方法。第二种是对象扩展的方式开发插件,即jQuery对象添加方法。
类扩展的插件
类扩展的插件开发最直接的理解就是给jQuery类添加类方法,可以理解为添加静态方法。典型的例子就是$.AJAX()这个函数,将函数定义于jQuery的命名空间中。关于类扩展的插件开发可以采用如下几种形式进行扩展:
1.添加全局函数
|
1
2
3
|
$.ltrim = function( str ) { return str.replace( /^\s+/, "" ); }; |
调用方式
|
1
2
|
var str=" 去除左空格 ";console.log("去除前:"+str.length+"去除后:"+$.ltrim(str).length); |
2.添加多个全局函数
|
1
2
3
4
5
6
7
|
$.ltrim = function( str ) { return str.replace( /^\s+/, "" );};$.rtrim = function( str ) { return str.replace( /\s+$/, "" );}; |
上面那种如果你写的全局函数比较少的情况下使用挺好,如果多的话建议使用 使用$.extend(object)
|
1
2
3
4
5
6
7
8
|
$.extend({ ltrim:function( str ) { return str.replace( /^\s+/, "" ); }, rtrim:function( str ) { return str.replace( /\s+$/, "" ); } }); |
3.独立的命名空间
虽然在jQuery命名空间中,我们禁止使用了大量的javaScript函数名和变量名。但是仍然不可避免某些函数或变量名将于其他jQuery插件冲突,因此我们习惯将一些方法封装到另一个自定义的命名空间。
|
1
2
3
4
5
6
7
8
|
$.myPlugin={ ltrim:function( str ) { return str.replace( /^\s+/, "" ); }, rtrim:function( str ) { return str.replace( /\s+$/, "" ); }}; |
使用独立的插件名,可以避免命名空间内函数的冲突,调用方式:
|
1
2
|
var str=" 去除左空格 ";console.log("调用前:"+str.length+"调用后:"+$.myPlugin.ltrim(str).length); |
对象扩展的插件
1.添加一个对象扩展方法
|
1
2
3
4
5
6
|
$.fn.changeColor= function() { this.css( "color", "red" );}; $.fn.changeFont= function() { this.css( "font-size", "24px" );}; |
调用方式:
|
1
2
3
|
$(function () { $("a").showColor();<br> $("div").changeFont();}); |
2.添加多个对象扩展方法
|
1
2
3
4
5
6
7
8
|
(function($){ $.fn.changeColor= function() { this.css( "color", "red" );}; $.fn.changeFont=function() { this.css( "font-size", "24px" );}; })(jQuery); |
兼容写法(防止前面的函数漏写了;):
|
1
2
3
4
5
6
7
8
|
;(function($){ $.fn.changeColor= function() { this.css( "color", "red" );}; $.fn.changeFont=function() { this.css( "font-size", "24px" );}; })(jQuery); |
上面都定义了一个jQuery函数,形参是$,函数定义完成之后,把jQuery这个实参传递进去.立即调用执行。这样的好处是,我们在写jQuery插件时,也可以使用$这个别名,而不会与prototype引起冲突.
3. 使用$.fn.extend(object)
题外话,查看jQuery源码(版本1.11.1)可以看到:
|
1
2
3
4
5
6
|
jQuery.fn = jQuery.prototype = { // The current version of jQuery being used jquery: version, constructor: jQuery,...................... }, |
jQuery是一个封装得非常好的类,比如语句$("a") 会生成一个 jQuery类的实例。jQuery.fn.extend(object)实际上是对jQuery.prototype进得扩展,就是为jQuery类添加“成员函数”。jQuery类的实例可以使用这个“成员函数”。
|
1
2
3
4
5
6
7
8
|
$.fn.extend({ changeColor:function() { this.css( "color", "red" );},changeFont:function() { this.css( "font-size", "24px" );}}); |
介绍了基本是关于对象扩展的基础的用法,下面开发一个简单的类似于代码高亮的功能,如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
(function($) { $.fn.highlight = function(options) { //插件参数的可控制性,外界可以修改默认参数 var defaults=$.extend($.fn.highlight.defaults, options ); //遍历函数,然后根据参数改变样式 return this.each(function() { var elem = $( this ); var markup = elem.html(); markup = $.fn.highlight.format( markup ); elem.html(markup); elem.css({ color: defaults.color, fontSize:defaults.fontSize, backgroundColor: defaults.backgroundColor }); });};//参数默认值$.fn.highlight.defaults={ color: "#556b2f", backgroundColor:"white", fontSize: "48px" };//格式化字体$.fn.highlight.format = function( txt ) { return "<strong>" + txt + "</strong>";};})(jQuery); $(function () { //调用插件 $("a").highlight({color:"red",fontSize:"24px"}); }); |
小结
jQuery这两种插件开发的使用,需要根据开发过程中的具体情况而定,第一种类扩展的方法类似于C#添加一个静态方法,第二种对象扩展主要是根据自己的实际业务而确定的,你的网站有些地方常用的功能肯定可以自己写成一个插件,比如说图片的查看,侧边栏的点击,有的时候你同样可以研究网上别人写的插件,也可以学到不少东西.
jQuery开发插件的两种方式的更多相关文章
- jQuery中开发插件的两种方式
jQuery中开发插件的两种方式(附Demo) 做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数 ...
- jQuery中开发插件的两种方式(附Demo)
做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数是属于jQuery命名空间的函数),如果将jQu ...
- jQuery 实现图片放大两种方式
jQuery 实现图片放大两种方式 一.利用css样式表实现,多用于后台显示 1.这种比较简单,利用dom元素的hover实现样式切换 <style> img{ cursor: point ...
- eclipse里安装SVN插件的两种方式
eclipse里安装SVN插件,一般来说,有两种方式: 直接下载SVN插件,将其解压到eclipse的对应目录里 使用eclipse 里Help菜单的“Install New Software”,通过 ...
- Myeclipse8.5 svn插件安装两种方式
第一种方式:(亲测成功)第一步:准备插件包:site-1.6.18.zip解压该包里面有features和plugins文件夹,删除该包里面的xml结尾的文件. 第二:我的Myeclipse8.5安装 ...
- jQuery开发插件的两个方法 js 深浅拷贝
1.jQuery.extend(object);为扩展jQuery类本身.为类添加新的方法.由全局函数来调用, 主要是用来拓展个全局函数 2.jQuery.fn.extend(object);为jQu ...
- 加载jquery主函数的两种方式
方式一: $(document).ready(fucntion){ var div1 = document.getElementById("div1"); alert(div1); ...
- jquery插件的两种形式
这里总结一下jquery插件的两种形式,一种是通过字面量的形式组织代码,另一种是通过构造函数的方式.下面就两种形式来分析俩个例子. 例子1: ;(function ($,window,document ...
- jquery ajax提交表单数据的两种方式
http://www.kwstu.com/ArticleView/kwstu_201331316441313 貌似AJAX越来越火了,作为一个WEB程序开发者要是不会这个感觉就要落伍,甚至有可能在求职 ...
随机推荐
- Linux Kernel 4.9 & BBR
https://www.mxgw.info/t/linux-kernel-4-9-bbr.html?utm_source=tuicool&utm_medium=referral
- linux集成开发环境
Linux操作系统的种种集成开发环境 随着Linux的逐渐兴起,已经有为数众多的程序在上面驰骋了,许多开发环境(Development Environment)也应运而生.好的开发环境一定是集成了编辑 ...
- Static Nested Class 和 Inner Class的不同?
Nested Class (一般是C++的说法),Inner Class (一般是JAVA的说法).Java内部类与C++嵌套类最大的不同就在于是否有指向外部的引用上. 注: 静态内部类(Inner ...
- redis的主从配置 扩容
由于redis的集群功能没有完全编写好,见:http://redis.io/topics/cluster-spec 集群只有测试版的第8个版本redis3.0.0 见 http://redis.io/ ...
- 解决HUE报错MultipleObjectsReturned: get() returned more than one Document2 -- it returned 2!
表现:界面上报错:,刚登陆进去就能看到,点击执行也会出现.日志里报: Traceback (most recent call last): File "/home/work/hue-3.10 ...
- HTTP 错误 404.2 - Not Found 由于 Web 服务器上的“ISAPI 和 CGI 限制”列表设置,无法提供您请求的页面。
IIS的根节点->右侧"ISAPI和CGI限制"->把禁止的DotNet版本项设置为允许,即可.
- 1 cocos2dx源码分析-程序启动与主循环
1 启动 在iOS系统中,由main函数启动默认调用了AppController main.m NSAutoreleasePool * pool = [[NSAutoreleasePool ...
- add-strings
https://leetcode.com/problems/add-strings/ package com.company; import java.util.LinkedList; import ...
- ScaleIO 1.2 基础
The ScaleIO virtual SAN consists of 3 software components =================== Meta Data Manager (MDM ...
- 详解Vuex常见问题、深入理解Vuex
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化. 状态?我把它理解为在data中的属性需要共 ...