您的位置:首页 > Web前端 > JQuery

【学习拾遗】Jquery(四)--自写插件

2015-06-29 08:00 706 查看
  前面博客也说过Jquery官网提供的插件,但是有时候我们需要自定义一些功能,免不了要自己写写jquery插件,这里来说一下jquery插件。

一)、格式

    1、通过$.extend()来扩展Jquery

    格式

     $.extend({

       函数名:function(参数){

         函数体

       }

     })

    实例

     $.extend({

       sayHello:function(name){

        alert("hello:"+(name?name:"world"));

       }

     })

    $.sayHello("leilei");

    $.sayHello();

    2、通过$.fn向jQuery添加新方法,实际上是在jquery的原型上面增加一个函数

    格式

    (function(){

      $.fn.myfunction=function(){

         函数体

      }

    })(jQuery)

    实例

    (function(){

      $.fn.myfunction=function(options){

        //默认设置

        var defaults={

           'color':'red',

           'fontSize':'12px'

        };

        //复写默认设置

        var settings=$.extend(defaults,options);

        //函数体,支持链式操作

        return this.css({

           'color':settings.color,

           'fontSize':settings.fontSize

            });

        }

    })(jQuery)

    3、通过$.fun=function(){}定义全局插件

    $.say=function(name){

      alert("hello"+name)

    }

二)、实例驱动

  通过两个实例,来实践一下自定义jquery插件。

    实例1、美化样式标签字体样式插件

    JS:

(function($){

//定义一个Beautifier对象工厂
var Beautifier=function(ele,options){
this.$element=ele;
this.defaults={
color:"red",
fontsize:"12px",
textdecoration:"none"
}
this.opts=$.extend({},this.defaults,options);
};

//为该对象的原型添加一个beautiful方法
Beautifier.prototype={
beautiful:function(){
return this.$element.css({
color:this.opts.color,
fontSize:this.opts.fontsize,
textDecoration:this.opts.textdecoration
});
}
};

$.fn.beautiful=function(opts){
var beautifier=new Beautifier(this,opts);
console.log(this)
return beautifier.beautiful();

}

})(jQuery)


  前台调用:

    $(function(){

      $("#test1").beautiful();

    })

  实例2、Table样式(两种方式实现)

  a、面向对象实现

(function($,window,document){

var MyTable=function(options){
this.defaults={
evenRowClass:"evenRow",
oddRowClass:"oddRow",
activeClass:"activeRow"
};
this.opts=$.extend({},this.defaults,options);
}

MyTable.prototype={
rowColor:function(ele){
var $thisTable=$(ele);
var myTable1=this;
$thisTable.find("tr:even").addClass(this.opts.evenRowClass).end().find("tr:odd").addClass(this.opts.oddRowClass).end()
$thisTable.find("tr").bind("mouseover mouseout",function(){
$(this).toggleClass(myTable1.opts.activeClass).css("cursor","hand")
})

}
}
$.fn.myTable=function(options){
var mytable=new MyTable(options);
mytable.rowColor(this);

}
})(jQuery,window,document)


  b、非面向对象实现

(function($){

$.fn.tableUI=function(options){

var defaults={
evenRowClass:"evenRow",
oddRowClass:"oddRow",
activeClass:"activeRow"
}
var pts=$.extend({},defaults,options);

this.each(function(){
var $thisTable=$(this);
return $thisTable.find("tr:even").addClass(pts.evenRowClass).end().find("tr:odd").addClass(pts.oddRowClass).end().find("tr").bind("mouseenter mouseleave",function(){
$(this).toggleClass(pts.activeClass)
})
})
}

})(jQuery)


PS:个人理解其实Jquery插件有两大要点:1、通过$.extend复写默认的设置;2、通过jquery选择器选择元素进行设置

实现效果就不再这里截图了,自己可以实践一下,主要的目的是在于如何自己开发一个Jquery插件。

三)、小结

  自定义Jquery插件,个人认为还是如下:

  1、通过$.extend复写默认的设置

  2、通过jquery选择元素进行设置

  3、如果有支持链式操作,在jquery插件的中加上return即可
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: