手写jQuery插件
插件原理:
jQuery插件就是用来扩展jQuery原型对象的一个方法,jQuery插件的使用方式就是jQuery对象方法的调用。
$.fn=jQuery.fn=jQuery.prototype,也就是说jQuery.fn对象是jQuery的原型对象,jQuery的DOM操作方法都在jQuery.fn对象上定义的,然后jQuery对象就可以通过原型继承这些方法了。
(function($){ //插件名 navStyle $.fn.navStyle=function(options){//扩展方法 //各种属性、参数 var defaults={ } //如果你在调用的时候写了新的参数,就用你新的参数,如果没有写,就用默认的参数。 var options=$.extend(defaults,options); return this.each(function(){ //操作 }) } })(jQuery);
例:设置li的背景颜色、划动时显示的背景颜色以及点击时显示的背景颜色
(function($){ //插件名 navStyle $.fn.navStyle=function(options){ //各种属性、参数 var defaults={ bgClass:'#ee2c2c', activeBgClass:"green", clickBgClass:"#cd22fe" } //如果你在调用的时候写了新的参数,就用你新的参数,如果没有写,就用默认的参数。 var options=$.extend(defaults,options); return this.each(function(){ var thisNav=$(this); //添加背景颜色 $(thisNav).find('li').css('background',options.bgClass); var li=$(thisNav).find('li'); //添加滑过时颜色 for(var i=0;i<li.length;i++){ li.eq(i).bind('mouserover',function(){ $(this).css('background',options.activeBgClass); $(this).siblings().css('background',options.bgClass); }) } //添加点击时的颜色 for(var i=0;i<li.length;i++){ li.eq(i).bind('click',function(){ $(this).css('background',options.clickBgClass); $(this).siblings().css('background',options.bgClass); }) } }) } })(jQuery);
html代码
<script src="js/jquery-1.8.3.min.js"></script> <script src="js/NavUI.js"></script> <script> $(function(){ $('ul').navStyle({bgClass:'#0000FF',activeBgClass:"yellow"}); }) </script>
插件调用时,插件内部的this就是当前调用插件的jQuery对象。
$.extend()函数用于将一个或多个对象的内容合并到目标对象上
如果在使用插件时仍然想链式调用其他方法,则在插件中添加代码 return this; 把当前的jQuery对象返回,然后就可以在插件后面继续调用其他jQuery方法了。
JQuery中对"$"的理解:
JQuery(或者是$)既可以作为函数使用,也可以做为对象使用;当作为函数使用时,类似于$(function(){})这样的形式;当作为对象使用时,类似于$.each()带点调用的形式。
1、作为一般函数调用:$(params)
(1)参数为函数:当DOM加载完成后,执行此回调函数;
(2)参数作为选择器字符串:查找所有匹配的标签,并将他们封装成JQuery对象;
(3)参数作为DOM对象:将DOM对象封装成JQuery对象。
2、作为对象使用 $.xxx()
(1)$.each() 遍历数组
(2)$.trim()去除两端空格
(3)$.extend()将多个对象合并成一个