jQuery插件的使用和写法

jquery 插件的基本写法 (function($){ var a={name:'大师',age:5555} var b={sex:'男',grade:5555} var c=$.extend({},a,b);//合并到新的对象 console.log(c) $.extend({//扩展静态方法 wushu:function(){alert('你不讲武德');} }); $.fn.extend({.. 阅读详情

编写jQuery插件

    编写插件的目的主要是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护和提高开发效率。

jQuery的插件主要分成3种类型。


1.封装对象方法的插件

   这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的一种插件。

2.封装全局函数的插件

   可以将独立的函数加到jQuery命名空间之下。例如jQuery.noConflict()方法、常用的jQuery.ajax()方法以及去除首位空格的jQuery.trim()方法等,都是jQuery内部作为全局函数的插件附加到内核上去的。

3.选择器插件

   个别情况下,会需要用到选择器插件。


插件的基本要点

1.jQuery插件的文件名推荐命名为jquery.[插件名].js,以免和其他JavaScript库插件混淆。

2.所有的对象方法都应该附加到jQuery.fn对象上,而所有的全局函数都应当附加到jQuery对象本身上。

3.在插件内部,this指向的是当前通过选择器获取的jQuery对象,而不像一般方法那样,例如click()方法,内部的this指向的DOM元素。

4.可以通过this.each来遍历所有元素。

5.所有的方法或函数插件,都应当以分号结尾,否则压缩的时候可能出现问题。为了更稳妥些,甚至可以在插件头部先加上一个分号,以免他人的不规范代码给插件带来影响。

6.插件应该返回一个jQuery对象,以保证插件的可链式操作。除非插件需要返回的是一些需要获取的量,例如字符串或者数组等。

7.避免在插件内部使用$作为jQuery对象的别名,而应使用完整的jQuery来表示。这样可以避免冲突,当然,也可以利用闭包这种技巧来回避这个问题,使插件内部继续使用$作为jQuery的别名。很多插件都是这样做的。


插件中的闭包

   关于闭包,ECMAScript对其进行了简单的描述:允许使用内部函数(即函数定义和函数表达式位于另一个函数体内),而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数,当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。即内部函数会在外部函数返回后被执行。而这个内部函数执行时,它仍然必须访问其外部函数的局部变量、参数以及其他内部函数。这些局部变量、参数和函数声明(最初时)的值是外部函数返回时的值,但也会收到内部函数的影响。

   首先定义一个匿名函数function(){/*这里放置代码*/},然后用括号括起来,变成(function(){/*这里放置代码*/})这种形式,最后通过()这个运算符来执行。可以传递参数进去,以供内部函数使用。

//注意为了更好的兼容性,开始之前还有一个分号:

;(function($){                 //开始时将$作为匿名函数的形参
       /*这里放置代码,可以使用$作为jQuery的缩写别名*/
})(jQuery);                    //这里就将jQuery作为实参传递给匿名函数了

以上是一种常见的jQuery插件的结构。


jQuery插件的机制

   jQuery提供了两种用于扩展jQuery功能的方法,即jQuery.fn.extend()方法和jQuery.extend()方法。前者用于之前提到的3种插件类型中的第1种,后者用于扩展后两种插件。这两个方法都接受一个参数,类型为Object。Object对象的“名/值对”分别代表“函数或方法名/函数主体”。

   jQuery.extend()方法除了可以用于扩展jQuery对象之外,还有一个强大的功能,就是用与扩展已有的Object对象。

jQuery代码如下:

jQuery.extend(target,obj1,…….[objN])

   用一个或多个其它对象来扩展一个对象,然后返回被扩展的对象。

   例如合并settings对象和options对象,修改并返回settings对象。

var settings={validate:false,limit:5,name:”foo”};
var options={validate:true,name:”bar”};
var newOptions=jQuery.extend(settings,options);

结果为:

newOptins={valitdate:true,limit:5,name:”bar”};

   jQuery.extend()方法经常被用于设置插件方法的一系列默认参数,如下面的代码所示:

function foo(options){
       options=jQuery.extend({
              name:”bar”,
              limit:5,
              datatype:”xml”
       },options);
};

   如果调用foo()方法的时候,在传递的参数options对象中设置了相应的值,那么就使用设置的值,否则就用默认的值。代码如下:

foo({name:”a”,length:”4”,dataType:”json”});
foo({name:”a”,length:”4”});
foo({name:”a”});
foo();

   通过使用jQuery.extend()方法,可以很方便地用传入的参数来覆盖默认值。此时,对方法的调用依旧保持一致,只不过要传入的是一个映射而不是一个参数列表。这种机制比传统的每个参数都去检测的方式不仅灵活而且更加简洁。此外使用命名参数意味着再添加新选项也不会影响过去编写的代码,从而使开发者使用起来更加直观明了。


编写jQuery插件

1.封装jQuery对象方法的插件


编写设置获取颜色的插件


   首先介绍如何编写一个color()插件。该插件用于实现以下两个功能。

(1)设置匹配元素的颜色。

(2)获取匹配的元素(元素集合中的第1个)的颜色。


   首先将该插件按规范命名为jquery.color.js。

   然后再JavaScript文件里搭好框架.由于是对jQuery对象的方法扩展,因此采用第1类方法jQuery.fn.extend()来编写。

;(function($){
        $.fn.extend({
               “color”:function(value){
                      //这里写插件代码
                }
        });
})(jQuery);

   这里给这个方法提供一个参数value,如果调用了方法的时候传递了value这个参数,那么就是用这个值来设置字体颜色;否则就是匹配元素的字体颜色的值。

   首先,实现第1个功能,设置字体颜色。注意,由于插件内部的this指向的是jQuery对象,而非普通的DOM对象。代码如下:

;(function($){
        $.fn.extend({
               “color”:function(value){
                       return this.css(“color”,value);
        }
});
})(jQuery);

   接下来实现第2个功能。如果没用给方法传递参数,那么就是获取集合对象中第1个对象的color的值。由于css()方法本身就具有返回第1个匹配元素样式值的功能,因此此处无需通过eq()来获取第1个元素。只要这两个方法结合起来,判断一下value的值是否是undefined即可。

jQuery代码如下:

;(function($){
        $.fn.extend({
               “color”:function(value){
                      if(color===undefined){
                              return this.css(“color”,value);
                      }else{
                              Return this.css(“color”,value);
                      }
                }
        });
})(jQuery);

   这样一来,插件也就完成了。现在来测试一下代码。

<script type=”text/javascript”>
        //插件编写
        ;(function($){
               $.fn.extend({
                      “color”:function(value){
                             if(color===undefined){
                                     return this.css(“color”,value);
                             }else{
                                     Return this.css(“color”,value);
                             }
                       }
               });
})(jQuery);
 
//插件应用
$(function(){
        //查看第一个div的color样式值
        alert($(“div”).color()+”\n返回字符串,证明此插件可用。”);
        //把所有的div字体颜色都设为红色
        alert($(“div”).color(“red”)+”\n返回object证明得到的是jQuery对象。“);
})
</script>
<div style=”color:red”>red</div>
<div style=”color:blue”>blue</div>
<div style=”color:green”>green</div>
<div style=”color:yellow”>yellow</div>

    另外,如果要定义一组插件,可以使用如下所示的写法:

:(function($){
      $.fn.extend({
             "color":function(value){
                        //插件代码
              },
             "border":function(value){
                       //插件代码
              },
              "background":function(value){
                      //插件代码
              }
      };
})(jQuery);

    表格隔行变色插件

    表格隔行变色的代码如下:

$("tbody>tr:odd").addClass("odd");
$("tbody>tr:even").addClass("even");
$('tbody>tr').click(function(){
       //判断是否选中
       var hasSelected=$(this).hasClass('selected');
       //如果选中,则移出selected类,否则就加上selected类
       $(this)[hasSelected?"removeClass":"addClass"]('selected')
               //查找内部的checkbox,设置对应的属性
               .find('checkbox').attr('checked'.!hasSelected);
});

       //如果复选框默认情况下是选择的,则高色
       $('tbody>tr:has(:checked)').addClass('selected');
    首先把插件方法取名为alterBgColor,然后为该插件方法搭好框架,jQuery代码如下:

;(function($){
       $.fn.extend({
                 "alterBgColor":function(options){
                 //插件代码
                  }
        });
})(jQuery);
     框架完成后,接下来就需要为options定义默认值。默认构建这样({odd:"odd",even:"even",selected:"selected"})一个Object。这样就可以通过$("#sometable").alterBgColor({odd:"odd",even:"even",selected:"selected"})自定义奇偶行的样式类名以及选中后的样式类名。同时,直接使用$("#sometable").alterBgColor()就可以应用 默认的样式类名。

jQuery代码如下:

;(function($){
        $.fn.extend({
           "alterBgColor":function(options){
                        options=$.extend({
                             odd:"odd",       /*偶数行样式*/
                             even:"even",   /*奇数行样式*/
                             selected:"selected"     /*选中行样式*/
                          },options);
            }
       });
})(jQuery);
        
    如果在后面的程序中需要使用options对象的属性,可以使用如下的方式来获得:

options.odd;             //获取options对象中odd属性的值
options.even;            //获取options对象中even属性的值
options.selected;        //获取options对象中selected属性的值
    接下来就需要把这些值放到程序中,来代替先前程序中的固定值。

    最后就是匹配元素的问题了。显然不能直接用$('tbody>tr')选择表格行,这样会使页面中全部的<tr>元素都隔行变色。应该使用选择器选中某个表格,执行alterBgColor()方法后,将对应的表格内<tr>元素进行隔行变色。因此,需要把所有通过$('tbody>tr')选择的对象改写成$('tbody>tr',this),表示在匹配的元素内(当前表格内)查找,并应用上一步中的默认值。jQuery代码如下:

;(function($){
       $.fn.extend({
               "alterBgColor":function(options){
                        //设置默认值
                        options=$.extend({
                                  odd."odd",
                                  even."even",
                                  selected:"selected"
                         },options);
                         $("tbody>tr:odd",this).addClass(options,odd);
                         $("tbody>tr:even",this).addClass(options,even);
                         $("tbody>tr",this).click(function(){
                                      //判断是否选中
                                      var hasSelected=$(this).hasClass(options,selected);
                                      //如果选中,则移出selected类,否则加上selected类
                   $(this)[hasSelected?"removeClass":"addClass"](options,selected)
                                      //查找内部的checkbox,设置对应属性
                          .find(':checkbox').attr('checked',!hasSelected);
                 });
                 //如果单选框默认情况下是选择的,则高色
                 $('tbody>tr:has(:checkd),this').addClass(options,selected);
                 rerturn this;  //返回this,使方法可链
                }
       });
})(jQuery);
    在代码的最后,返回this,让这个插件具有可链性。
   此时,插件就完成了。现在来测试这个插件。构造两个表格,id分别为table1和table2,然后使用其中一个<table>调用alterBgColor()方法,以便查看是否能独立工作,并且具有可链性。
   jQuery代码如下:

$('#table2')
           .alterBgColor()                     //应用插件
           .find("th").css("color","red");     //可链式操作
需要注意的是,jQuery的选择符可能会匹配1个或者多个元素。因此,在编写插件时必须考虑到这些情况。可以在插件内部调用each()方法来遍历匹配元素,然后执行相应的方法,this会依次引用每个DOM元素。如下jQuery代码所示:
;(function($)){
         $.fn.extend({
                  "SomePlugin":function(options){
                             return this.each(function(){
                                        //这里置放代码
                             });
                  }
         });
})(jQuery);

jquery插件库合集 pui 是一款基于jQyery开发的插件库。目前线上稳定使用已有2年多,丰富的接口,简单明了的调用方式,灵活的回调函数,让您轻轻松松打造出富有灵活交互的Web前端界面解决方案。 插件库封装了布局、表单元素、表单校验、弹窗、toast、气泡pop、tab切换、日历时间、分页、表格、树、css命名等功能 立即下载

相关推荐

jquery插件库大全(200个).zip

jquery插件库大全(200个): jqueryQQ表情插件 jquery下拉菜单导航 jquery下拉菜单栏 jquery仿Windows系统选中图标效果 jquery仿京东商品详情页图片放大效果 jquery仿百度新闻焦点轮播 jquery分离布局模版 jquery分类导航 jquery加载动画插件 jquery华丽的css3滚动 jquery商品分类选择 jquery图像剪辑 jquery图像剪辑.rar jquery图片切换效果 jquery图片展示插件 jquery图片弹出框插件 jquery图片排序过滤 jquery图片放大 jquery图片滑动效果 jquery城市二级联动 jquery多值输入插件 jquery多级菜单导航 jquery大转盘game jquery实现网易邮箱首页插件 jquery导航,缓慢弹出下拉效果 jquery左侧导航滑动网页定位效果 jquery左侧弹出二级菜单 jquery弹出层 jquery弹出层 三种弹出效果 jquery弹出插件 jquery抽奖插件 jquery抽奖插件.rar jquery拖拽布局 jquery拖放插件 jquery

150个jQuery插件总有你喜欢的

1. simplyScroll simplyScroll这个jquery插件能够让任意一组元素产生滚动动画效果,可以是自动、手动滚动,水平、垂直方向滚动。此外,它还可以接受动态图片输入通过Flickr供稿或一个本地JSON数据源。 2. Animated Collapsible DIV 为任何DIV层添加Web2.0风格的动画隐藏/显示效果 3. jQuery Pagina

爱生活 6385

Flink CDC 实战:5分钟搞定PostgreSQL数据实时同步(附避坑指南)

本文详细介绍了如何使用Flink CDC实现PostgreSQL数据的实时同步,包括环境配置、逻辑复制槽创建、Flink环境搭建及实战验证。通过5分钟快速指南,帮助开发者高效搭建实时数据管道,并提供了常见问题排查和生产环境优化建议。

red88的博客 818

300个jQuery插件

概述 jQuery 是继 prototype 之后又一个优秀的 Javascript. 框架。其宗旨是—写更少的代码,做更多的事情。它是轻量级的 js 库(压缩后只有21k) ,这是其它的 js 库所不及 的,它兼容 CSS3,还兼容各种浏览器(IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。 jQuery 是一个快速的,简洁的 javaScript. 库,

编码改变世界 4526

TwinCAT3 Modbus-TCP Client/Server使用

/起始地址是12289//起始地址是12294。

panjinliang066333的博客 7732

结构方程模型amos的操作与应用pdf_AMOS结构方程进行医学问卷量表分析教程(一阶简单路径效应分析)...

在生物医药的数据统计分析中,要研究量表和量表之间的关系时候,由于维度题项较多,而不再是单一的变量,因此我们要使用AMOS结构方程进行处理。​ 举个例子,比如对住院患者的相关研究,设置了患者在住院期间的适应性量表和自我效能的量表,想考察患者适应性与自我效能之间的影响关系,或者说适应性的强弱是否会影响到患者自我效能的高低。此时适应性量表和自我效能量表都不是单一的变量,而是有N个题项构成的...

weixin_39637614的博客 7708

jQuery插件的几种写法

之前在一篇求职的帖子上看过,前端面试的景点题目:jquery插件的几种写法。 这是看到的一篇总结。比较到位。详尽且简单易懂。如果之前看过jquery的源码,应该特别好理解了。 插件编写的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护。 一、jQuery插件开发方式 1、通过$.extend()来扩展jQuery 2、通过$.fn 向j

haliofwu的专栏 9962

【人工智能】Gemini怎么使用智能体的能力? Gemini Gems: 定制你的AI智能体

Gems 是 Gemini 的定制版本。你可以通过设定特定的指令(Instructions),让它变成你需要的专家。一旦创建,它会记住这些设定,你不需要在每次对话时重复输入背景信息。目前创建和使用自定义 Gems 通常需要订阅(Google One AI Premium 计划)。对于大多数用户来说,Gemini Advanced 中的 Gems是使用智能体能力的最直接方式。它能让你把重复性的提示词封装成一个好用的工具。

奶爸的编程之路,也就一周冷个三天 778

jQuery插件写法

jQuery插件写法

汤一飞 239

【车载以太网】Eth Stack Bringup

摘要:本文基于AUTOSAR架构,详细介绍了在TC3xx硬件平台上实现EthStack Bringup的全过程。作者通过配置MCAL和Davinci工具,完成了EthTrcv、Eth、EthIf、EthSM和TcpIp等模块的集成,并解决了16字节内存对齐和以太网速率不匹配等问题。最终实现了PC端与开发板的Ping通,并通过WireShark验证了数据包收发。文章总结了调试中的关键问题与解决方案,强调了实践的重要性,为后续EthStack的深入分析奠定了基础。

qq_36056498的博客 180

深度学习实战42-基于大模型开发MathGPT的原理介绍,让数学问题智能解答变为可能

大家好,我是微学AI,今天给大家介绍一下深度学习实战42-基于大模型开发MathGPT的原理介绍,让数学问题智能解答变为可能。在去年ChatGPT的发布后,各种国内外的大语言模型层出不穷涌现,但是大家都知道现在的模型的诟病的数学能力不足,就算是简单的数学题都可能算错,今天我就来给大家引入MathGPT的模型,用来解决GPT解决数学问题,对于简单的初中数学高中数学都可以解决,让数学问题精准答题得到实现。

微学AI的博客 1649

JQuery插件写法的总结

JQuery插件写法的总结,看到有用的文章转载一下(小量修改),原文见:http://www.jcodecraeer.com/a/jquery_js_ajaxjishu/2012/0418/110.html 最近Web应用程序中越来越多地用到了JQuery等Web前端技术。这些技术框架有效地改善了用户的操作体验,同时也提高了开发人员构造丰富客户端UI的效率。JQuery本身提供了丰富的操作,

shenzhenNBA的专栏 1309

华为OD机考 新系统真题 【区分奇偶的数组排序】

华为OD机试 新系统真题【区分奇偶的数组排序】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【区分奇偶的数组排序】多语言题解。

qq_45776114的博客 507

jQuery插件的写法以及使用

如今做web开发,jquery 几乎是必不可少的,同时jquery插件也是不断的被大家所熟知,以及运用。最近在搞这个jquery插件,发现它的牛逼之处,所以讲一讲jQuery插件的写法以及使用 (function($){ $.fn.extend({ color:function(options){ var defaults = {color:'blue', size: "30px"}

qq_18661257的专栏 1万+

Android系统修改驱动固定USB摄像头节点绑定前后置摄像头

Android系统中usb摄像头节点会因为摄像头所接的usb口不同或者usb设备识别顺序不一样而出现每次开机生成的video节点不一样的问题。由于客户app调用摄像头时,需要固定摄像头的节点。因此需要针对前面的情况做处理。

Android系统开发笔记 2250

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

jquery插件写法

//传统写法 //全局方法 ;(function($){ $.method = function(){ } //or $.obj = { method1:function(){}, method2:function(){} } })(jQuery); //对象方法 ;(function...

weixin_30702887的博客 81

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

jquery插件的几种写法

最近Web应用程序中越来越多地用到了JQuery等Web前端技术。这些技术框架有效地改善了用户的操作体验,同时也提高了开发人员构造丰富客户端UI的效率。JQuery本身提供了丰富的操作,但是,有时候我们需要根据我们自己的业务和系统特色(风格)构造一些我们常用的前端UI组件,而 JQuery的插件给了我们一个较好的方式来构造这些UI组件,方便我们日后反复重...

weixin_33690367的博客 209

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

[转]jQuery插件写法总结以及面向对象方式写法

本文转自:http://www.xuanfengge.com/jquery-plug-in-written-summary-and-summary-of-writing-object-oriented-manner.html 前言 最近在折腾jQuery插件,写成插件的目的就是为了实现功能与项目相分离,使得这个代码在下一个项目中能直接引用不出错。这使得我们在写插件的时候,就得考虑清楚,怎么写才...

weixin_34041003的博客 191

Jquery插件的写法

JQuery.fn.extend(object) ===》扩展 jQuery 元素集来提供新的方法(通常用来制作插件)。 JQuery.extend(object) ===》扩展jQuery对象本身。 $.fn.extend() ===》 $("#box").xxx():局部 $.extend() ===》$.xxx() : 全局 插件的写法(规则) 1》引入方式 <script src='jquery1.7.js'></script> <script

DaftJayee的博客 289

JQuery插件写法总结

JQuery插件写法的总结 摘要JQuery插件写法的总结 最近Web应用程序中越来越多地用到了JQuery等Web前端技术。这些技术框架有效地改善了用户的操作体验,同时也提高了开发人员构造丰富客户端UI的效率。JQuery本身提供了丰富的操作,但是,有时候我们需要根据我们自己的业务和系统特色 JQuery插件写法的总结 最近Web应用程序中越来越多地用到了JQuery等Web前端...

weixin_33705053的博客 103

JQuery插件写法

JQuery插件写法的总结 最近Web应用程序中越来越多地用到了JQuery等Web前端技术。这些技术框架有效地改善了用户的操作体验,同时也提高了开发人员构造丰富客户 端UI的效率。JQuery本身提供了丰富的操作,但是,有时候我们需要根据我们自己的业务和系统特色(风格)构造一些我们常用的前端UI组件,而 JQuery的插件给了我们一个较好的方式来构造这些UI组件,方便我们日后反复重用这些组件。...

xiaoshengjinbu的博客 168

jQuery插件写法总结以及面向对象方式写法总结

前言 最近在折腾jQuery插件,写成插件的目的就是为了实现功能与项目相分离,使得这个代码在下一个项目中能直接引用不出错。这使得我们在写插件的时候,就得考虑清楚,怎么写才能使得插件能够通用、灵活度高、可配置、兼容性好、易用性高、耦合度低等。 接下来就对以下几种写法进行分析,前两个是jQuery插件,后面2个是以对象的形式开发,都类似。而且写法也很多,我们要懂得这样写的利弊。另一篇基础文

qq_32445689的博客 970
上一篇: javascript中的正则表达式
下一篇: 正则表达式——反向引用
codegarble
博客等级 码龄10年 2粉丝 4原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值