jQuery 插件编程精讲与技巧

适应的读者:

1、有一定的jquery编程基础但是想在技能上有所提升的人

2、前端开发的程序员

3、对编程感兴趣的学生

为什么要学习jquery插件的编写?

为什么要学习jquery插件的编写?相信这是很多人都会有的问题,因为目前市面上的插件众多基本上满足日常的开发需求,但是我认为一下的这几点情况是一定要学会插件基础才能解决的:

1、如果有这样的一种场景:假设如果你使用了一个控件,但是这个控件有缺少了一点点的相关的功能,那么如果你不懂jquery插件编写的话,那么你就只能找其他的控件进行补充,这样就会造成冗余,如果你会修改jquery插件的话,那么这样的问题就解决了,因为你只需要修改一点点的功能就能够完成任务

2、有些时候,如果你是要使用一个大型的控件(或者是框架)中的一小部分功能,那么你就需要引入整个控件(或者是框架)这样就会使系统过于庞大,解决的方法是如果像是制定一个对话框等这些简单的功能的话,那么就可以自行定义一个以达到不是太过庞大

3、我们可以 把常用的代码进行封装,方便以后进行重用

综上所述,一般我们编写jquery控件是用来封装常用的代码,也可以对一些简单功能进行编写或者对某些功能进行改写

基础知识讲解:

首先要学习怎么编写jquery插件,我们应该了解有几种调用插件的方式:

1、通过$.extend()来拓展jquery

2、通过向$.fn来想jquery添加方法

3、通过$.widget()应用jQuery UI部件工场方法创建

其中的方式1没办法调用选择器,仅仅被jQuery理解成为添加静态方法,所以我们使用的时候不需要选中DOM对象

示例代码:

HTML代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <script type="text/javascript" src="jquery.js"></script>
    <script type="text/javascript" src="name.js"></script>
</head>
<body>
    <script type="text/javascript">
        $.nameLength(‘leslie‘);
    </script>
</body>
</html>

JavaScript代码:

$.extend({
    nameLength:function(name){
        alert(name.length);
    }
});

运行结果如下:

其中第一种方式开发开发插件比较少见,一般的插件都是使用第二种方法进行开发的

第二种方法是:往$.fn中添加一个方法,后面所要填写的就是方法的名称

HTML代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DEMO</title>

</head>
<body>
    <div class="test" alt="No.1">这是第一段变红色的代码</div>
    <div class="test" alt="No.2">这是第二段变红色的代码</div>
    <div>这一段代码不变色</div>
</body>
<script type="text/javascript" src="jquery.js"></script>
<script src="test1.js"></script>
<script type="text/javascript">
    $(‘.test‘).changeColor();
</script>
</html>

JavaScript代码:

$.fn.changeColor=function(){
    this.css(‘color‘,‘red‘);
    $(this).append(" "+$(this).attr("alt"));
}

运行的结果如下:

从上面的运行结果我们可以得出结论:插件调用成功,但是问题来了,第二段的文字是要加上NO.2但是却加上了No.1,这个也就是直接使用方法带来的一个问题,就是会将所有的复合条件的内容都进行统一的设置,那么要怎样才可以编程No.2呢?那就需要引入一个方法来对每一个复合要求的内容进行“个性化”,引入$.each()就可以解决问题了

将以上的JavaScript修改为:

$.fn.changeColor=function(){
    this.css(‘color‘,‘red‘);
    this.each(function(){
        $(this).append(" "+$(this).attr("alt"));
    })

}

运行的效果如下:

第三种方式调用这里我们先不进行讲解,待后续会因为需要jQuery UI的基础的朋友才能更好的理解,所以有机会将会在下一次写插件编程对其进行详细的解剖

链式调用

细心的你可能会发现,这样编写出来的插件不能进行链式调用的,也就是:不能出现:$(‘div‘).function1(‘param1‘).function2(‘param2‘),那么这个问题怎么解决呢,其实很简单只需要在插件中支持可以链式调用的方法前面加上return就可以了

将上面的JavaScript修改如下就可以链式调用了

$.fn.changeColor=function(){
    this.css(‘color‘,‘red‘);
    return this.each(function(){
        $(this).append(" "+$(this).attr("alt"));
    })

}

同时一个强大的插件也绝不仅仅是允许用户对其进行调用的,同时用户也可以自定义的对其进行传参,使得插件更具灵活性,这里的传参跟普通的函数传参是一样的,略过

保存用户自定义参数

先看一下下面的代码

HTML代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>DEMO</title>

</head>
<body>
    <div class="default">默认的样式</div>
    <div class="change">修改后的样式</div>
</body>
<script type="text/javascript" src="jquery.js"></script>
<script src="test1.js"></script>
<script type="text/javascript">
    $(‘.default‘).fontSet();
    $(‘.change‘).fontSet({
        ‘color‘:‘green‘,
        ‘fontSize‘:‘20px‘
    });
</script>
</html>

JavaScript代码如下:

$.fn.fontSet=function(options){
    var font={
        ‘color‘:‘red‘,
        ‘fontSize‘:‘12px‘
    };
    var setting=$.extend({},font,options);
    return this.css({
        ‘color‘:setting.color,
        ‘fontSize‘:setting.fontSize
    })
}

运行情况如下:

在JavaScript中的extend方法中添加{}是用来对防止用户传入的值,直接覆盖掉默认的数值

注意:在插件中的定量必须为键值对数组,否则一旦编写错误的话,那么就会出现没办法将插件加载进来的情况

面向对象插件开发

在开发大型的插件的时候,如果直接像上面的这种方法一样,那么会导致代码混乱,管理难度大等诸多的问题,所以就需要像常规编程一样使代码更便于管理,因此面向对象的插件开发也就变得格外的重要,面向对象开发的大致格式可以如下所示:

//定义对象的构造函数
var class_name=function(ele,opt){
    this.element=ele;
    this.defaults={
        //default setting
    };
    this.options=$.exetend({},this.defaults,opt);
}
//定义对象的方法
class_name.prototype = {
     method_name:function() {
         return …………
     }
};
//在插件中使用对象
$.fn.plugin=function(){
    //创建func实体
    var func=new class_name(this,options);
    //调用其方法
    return func.method_name();
}

 

实战开发经验分享

目前市面是的插件编程琳琅满目,但是唯独对开发经验这一块说的比较少,下面就结合我对插件开发的经验以及其他人开发的优秀特点惊醒分析,希望读者可以收获一些东西,方便以后的使用

1、在插件开发的过程中我们要尽量的保证插件内部环境的独立性,也就是说内部尽量的不被外界干扰,这时候闭包就派上用场了,而且在闭包的前面要加上; 以防止外部的语法错误使得错误指向插件内部

基本格式如下:

;(function($){
    //main contain

})(jQuery);

2、开发中常见的方法

find(‘m’);//主要用法是获取每个控件下面是否存在特定class属性或者id属性的对象

each() //主要是用来遍历每个控件

each(options,function(key,value))  //获取在options范围内每次循环的key和value的值

each(function(i,item))  //i为遍历对象位于第几个,item为DOM

3、由于jquery 插件是基于jquery的,那么就要求我们要调用jquery插件之前要先调用jquery

4、对于像KO(knockout.js)等这些脚本支持自定义的属性值,这又是怎样做到的呢?

例如HTML代码中有data-name这个属性,那么我们可以在插件中定义一对默认的键值对为name:‘xxx‘,然后通遍历所有的default中的key值,并且调用attr属性查找

是否存在data-key这个属性,如果这个属性为undefined那么就将其传入value,但是上面的这些插件都是要调用JS进行激活的

如果有哪位大神知道怎样编写像Boostrap这样的直接写class就可以的插件,请告诉我实现方法,小菜鸟不胜感激

5、在插件开发的过程中我发现,怎样在一个事件触发的同时触发另一个事件

例如:要实现拖动的效果,那么我们就必须在触发点击事件的同时触发鼠标移动事件,

实现的代码简单的可以写为:

btn.mousedown(function(event) {
    /* Act on the event */
    $(document).mousemove(function(event){
        //input your content
    })
});

这样就可以实现两种事件同时触发了

6、兼容性问题也是要注意的,在CSS3中我们要注意IE、FixFox、Chrome这些浏览器之间的兼容性问题,一般我们忽略IE的那些低版本的浏览器,而要在FixFox前面加上-moz,例如:-moz-box-shadow 而要在Chrome前面加上-webkit,对于Safari也是一样的,这种差异主要是内核的不同导致的

UI插件的编写流程

1、先要对所要制作的UI插件进行分析,然后对其进行分层,接着就编写对应层次的div

2、第二步,我们要通过编写css达到将控件的初始化状态制作出来

3、结合要实现的效果,制作JS脚本,并且要保证无误的情况下才能进行第四步

4、将JS文件通过插件编程的形式重写,这样UI插件就完成了

时间: 2024-10-10 06:37:24

jQuery 插件编程精讲与技巧的相关文章

编写优秀jQuery插件的10个技巧

本文和大家分享的主要是jQuery 插件的编写技巧,一起来看看吧,希望对大家 学习jquery有所帮助. 1. 把你的代码全部放在 闭包 里面 这是我用的最多的一条.但是有时候在闭包外面的方法会不能调用. 不过你的插件的代码只为你自己的插件服务,所以不存在这个问题,你可以把所有的代码都放在闭包里面. 而方法可能应该放在Prototype 方法内部. ( function($)  { //code here })( jQuery); 2. 提供插件的默认选项 你的插件应该会有一些选项是可以让开发者

jQuery插件编写及链式编程模型小结

JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQuery插件,然后像使用jQuery那样来操作DOM.  一.jQuery插件开发快速上手 1.jQuery插件模板 关于jQuery插件的编写,我们可以通过为jQuery.fn增加一个新的函数来编写jQuery插件.属性的名字就是你的插件的名字,其模板如下: (function($){ $.fn.m

jQuery插件编写及链式编程模型

jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQuery插件,然后像使用jQuery那样来操作DOM.  一.jQuery插件开发快速上手 1.jQuery插件模板 关于jQuery插件的编写,我们可以通过为jQuery.fn增加一个新的函数来编写jQuery插件.属性的名字就是你的插件的名字,其模板如下:

JQuery-- 链式编程、静态函数,自己制作jQuery插件

一.链式编程 为什么jQuery运行链式编程 ,让我们的代码(方法)连续不间断书写(连续调用)其实主要还是jQuery很多的函数执行完毕之后,都会返回一个jQuery对象 因为获取操作的时候,会返回获取到的相应的值,无法返回jQuery对象 其实函数内部返回的就是一个jQuery对象 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"&g

剑指Offer名企面试官精讲典型编程题pdf

下载地址:网盘下载 <剑指Offer:名企面试官精讲典型编程题(第2版)>剖析了80个典型的编程面试题,系统整理基础知识.代码质量.解题思路.优化效率和综合能力这5个面试要点.<剑指Offer:名企面试官精讲典型编程题(第2版)>共分7章,主要包括面试的流程,讨论面试每一环节需要注意的问题:面试需要的基础知识,从编程语言.数据结构及算法三方面总结程序员面试知识点:高质量的代码,讨论影响代码质量的3个要素(规范性.完整性和鲁棒性),强调高质量代码除完成基本功能外,还能考虑特殊情况并对

Java并发编程核心知识体系精讲

第1章 开宗明义[不看错过一个亿]本章一连串设问:为什么学并发编程?学并发编程痛点?谁适合学习本课?本课程包含内容和亮点?首先4大个理由告诉你为什么要学,其实源于JD岗位要求就不得不服了.其次5个痛点+12个亮点,是否说服你要死磕Java并发编程呢?... 第2章 跨越第一座山“线程八大核心”[适用于纵观全貌]八大核心-序章.从本章开始将带你攻克并发编程领域的“第一座大山”:多线程八大核心. 第3章 核心1:实现多线程的正确姿势[解读官方文档,够权威]相信很多小伙伴经常在各大技术博客或者论坛甚至

Java并发编程核心知识体系精讲 完整版

第1章 开宗明义[不看错过一个亿]本章一连串设问:为什么学并发编程?学并发编程痛点?谁适合学习本课?本课程包含内容和亮点?首先4大个理由告诉你为什么要学,其实源于JD岗位要求就不得不服了.其次5个痛点+12个亮点,是否说服你要死磕Java并发编程呢?... 第2章 跨越第一座山“线程八大核心”[适用于纵观全貌]八大核心-序章.从本章开始将带你攻克并发编程领域的“第一座大山”:多线程八大核心. 第3章 核心1:实现多线程的正确姿势[解读官方文档,够权威]相信很多小伙伴经常在各大技术博客或者论坛甚至

Webpack + React全栈工程架构项目实战精讲

详情请交流  QQ  709639943 01.Webpack + React全栈工程架构项目实战精讲 02.跨平台混编框架 MUI 仿豆瓣电影 APP 03.Node.js入门到企业Web开发中的应用 04.Python3 全网最热的Python3入门+进阶 比自学更快上手实际开发 05.Java秒杀系统方案优化 高性能高并发实战 06.Java深入微服务原理改造房产销售平台 07.快速上手Linux 玩转典型应用 08.全面系统讲解CSS 工作应用+面试一步搞定 09.Java Spring

javaScript学习总结(二)——jQuery插件的开发

概要 jQuery插件就是以jQuery库为基础衍生出来的库,jQuery插件的好处是封装功能,提高了代码的复用性,加快了开发速度,现在网络上开源的jQuery插件非常多,随着版本的不停迭代越来越稳定好用,在jQuery官网有许多插件:http://plugins.jquery.com/ 一.插件开发基础 1.1.$.extend 在jQuery根命名空间下直接调用的方法可以认为是jQuery的静态方法或属性,常常使用方法名来调用,使用.方法名来调用,使用.extend这个静态方法可以完成两个功