zoukankan      html  css  js  c++  java
  • Jquery插件开发方法

    jQuery是一个封装的很好的类,比如我们用语句$("#btn1") 会生成一个 jQuery类的实例。

    一、jQuery插件开发注意要点

    1、使用闭包,避免全局依赖,避免第三方破坏。

    2、避免在插件内部使用$作为JQuery对象的别名,而应使用完整的JQuery来表示,这样可以避免冲突。

    3、插件应该返回一个JQuery对象,以便保证插件的可链式操作。

    4、所有方法或函数插件,都应当以分号结尾,否则压缩的时候可能会出现问题。为了更加保险,可以在插件头部添加一个分号(;),以免他们的不规范代码给插件带来影响。

    二、jQuery插件开发方法

    1、jQuery.extend(object);

    属于级别,给jQuery类添加新方法,可以理解为添加静态方法,是基于类的扩展,最明显的例子是.ajax(...)。

    //插件代码
    $.extend({ 
        add:function(a,b){return a+b;} , 
        minus:function(a,b){return a-b;} 
    }); 
    //页面调用
    var i = $.add(3,2); 
    var j = $.minus(3,2);
    
    如果要扩展已有的对象,比如: 
    var newSrc=$.extend(dest,src1,src2,src3...) 
    它的含义是将src1,src2,src3...合并到dest中,返回值为合并后的dest,由此可以看出该方法合并。 
    //插件代码
    var result=$.extend({},{name:"Tom",age:21},{name:"Jerry",sex:"Boy"}) 
    //结果 
    result={name:"Jerry",age:21,sex:"Boy"} 

    2、jQuery.fn.extend(object);

    属于对象级别,给jQuery对象添加方法,是基于对象的拓展。

    jQuery.fn = jQuery.prototype

    //插件代码
    $.fn.extend({ 
        check:function(){ 
            return this.each({ 
            this.checked=true; 
            }); 
        }, 
        uncheck:function(){ 
            return this.each({ 
            this.checked=false; 
            }); 
        } 
    }); 
    //页面调用
    $('input[type=checkbox]').check(); 
    $('input[type=checkbox]').uncheck(); 
    //扩展
    $.xy = { 
        add:function(a,b){ return a+b; } , 
        minus:function(a,b){ return a-b; }, 
        voidMethod:function(){ alert("void"); } 
    }; 
    var i = $.xy.add(3,2); 
    var m = $.xy.minus(3,2); 
    $.xy.voidMethod(); 

    3、封装全局函数的插件(级别)

    jQuery.foo = function() { 
        alert('This is a test. This is only a test.'); 
    }; 
    jQuery.bar = function(param) { 
        alert('This function takes a parameter, which is "' + param + '".'); 
    }; 

    //页面调用

      $.foo()

    三、jQuery插件开发案例

    案例A

    1、运用在多个元素控件中, 如果要遍历,可以用this.each方法。

    //插件代码
    (function ($) { 
        $.fn.hoverElement = function () { 
            this.each(function () { 
                $(this).hover( 
                    function () { 
                        $(this).addClass("Add"); 
                    }, 
                    function () { 
                        $(this).removeClass("Remove"); 
                    } 
                ); 
            }) 
        } 
    })(jQuery);
    //html代码
    <div class="hoverText"> 
        First Button.. 
    </div> 
    <div class="hoverText"> 
        Second Button.. 
    </div> 
    <div class="hoverText"> 
        Third Button.. 
    </div>  
    //js代码
    <script type="text/javascript"> 
        $(document).ready(function () { 
            $(".hoverText").hoverElement(); 
        }); 
    </script> 

    2、链式操作

    //插件代码
    (function ($) { 
        $.fn.hoverElement = function () { 
            return this.each(function () { 
                $(this).hover( 
                    function () { 
                        $(this).addClass("Add"); 
                    }, 
                    function () { 
                        $(this).removeClass("Remove"); 
                    } 
                ); 
            }) 
        } 
    })(jQuery); 
    //html代码
    <div class="hoverText"> 
        First Button.. 
    </div> 
    <div class="hoverText"> 
        Second Button.. 
    </div> 
    <div class="hoverText"> 
        Third Button.. 
    </div> 
    //js代码
    <script type="text/javascript"> 
        $(document).ready(function () { 
            $(".hoverText").hoverElement(); 
        }); 
    </script> 

    3、自定义插件

    我们需要设置一些默认值,当它没有设置的时候,我们就用这些默认值。默认值和用户传进来的值是怎么联合在一起的呢?通过var obj = $.extend(defaultVal, options); 可以实现用户自定义的值覆盖默认值。

    //插件代码
    (function ($) { 
        $.fn.textHover = function (options) {//options 经常用这个表示有许多个参数。 
            var defaultVal = { 
                Text: 'Your mouse is over', 
                ForeColor: 'red', 
                BackColor: 'gray' 
            }; 
            var obj = $.extend(defaultVal, options); 
            return this.each(function () { 
                var selObject = $(this);//获取当前对象 
                var oldText = selObject.text();//获取当前对象的text值 
                var oldBgColor = selObject.css("background-color");//获取当前对象的背景色 
                var oldColor = selObject.css("color");//获取当前对象的字体的颜色 
                
                selObject.hover(function () {//定义一个hover方法。 
                        selObject.text(obj.Text);//进行赋值 
                        selObject.css("background-color", obj.BackColor);//进行赋值 
                        selObject.css("color", obj.ForeColor);//进行赋值 
                    }, 
                    function () { 
                        selObject.text(oldText); 
                        selObject.css("background-color", oldBgColor); 
                        selObject.css("color", oldColor); 
                    } 
                ); 
            }); 
        } 
    })(jQuery); 
    //html代码
    <div id="div1" class="textBar"> 
        Mouse over here..... 
    </div> 
    <div id="div2" class="textBar"> 
        Mouse over here..... 
    </div> 
    //js代码
    $(document).ready(function () { 
        $('#div1').textHover({ 
            Text: 'I am going to over..', 
            ForeColor: 'yellow', 
            BackColor: 'Red' 
        }); 
        $('#div2').textHover({ Text: 'I am second div...' }); 
    }); 

    案例B

    1、插件代码
    /* 
    * tableUI 0.1 
    * Copyright (c) 2013 camillea http://www.cnblogs.com/camille666/
    * Date: 2013-03-30 
    * 美化表格,让表格的奇偶行颜色不同,鼠标移到某行上,某行可以高亮显示。
    */ 
    (function($){ 
        $.fn.tableUI = function(options){ 
            var defaults = { 
                evenRowClass:"evenRow", 
                oddRowClass:"oddRow", 
                activeRowClass:"activeRow" 
            } 
    //合并多个对象为一个,如果你在调用的时候写了新的参数,就用新的参数,如果没有写,就用默认的参数。
            var options = $.extend(defaults, options); 
            this.each(function(){ 
                var thisTable=$(this); 
                //添加奇偶行颜色 
                $(thisTable).find("tr:even").addClass(options.evenRowClass); 
                $(thisTable).find("tr:odd").addClass(options.oddRowClass); 
                //添加活动行颜色 
                $(thisTable).find("tr").bind("mouseover",function(){ 
                    $(this).addClass(options.activeRowClass); 
                }); 
                $(thisTable).find("tr").bind("mouseout",function(){ 
                    $(this).removeClass(options.activeRowClass); 
                }); 
            }); 
        }; 
    })(jQuery); 
    2、html代码
    把该插件保存为table.js,新建html。
    <script src="js/jquery-1.11.1.js" type="text/javascript"></script> 
    <script src="js/table.js" type="text/javascript"></script> 
    3、js代码
    <script type="text/javascript"> 
        $(document).ready(function () { 
            $("#btn1").click(function () { 
                $("#div1").tableUI (); 
            }); 
        }); 
    </script> 
  • 相关阅读:
    Java+7入门经典 -1 简介
    优化算法动画演示Alec Radford's animations for optimization algorithms
    如何写科技论文How to write a technical paper
    开始学习深度学习和循环神经网络Some starting points for deep learning and RNNs
    用500行Julia代码开始深度学习之旅 Beginning deep learning with 500 lines of Julia
    用10张图来看机器学习Machine learning in 10 pictures
    ICLR 2013 International Conference on Learning Representations深度学习论文papers
    ICLR 2014 International Conference on Learning Representations深度学习论文papers
    卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现
    卷积神经网络Convolutional Neural Networks
  • 原文地址:https://www.cnblogs.com/camille666/p/jquery_plugins_develop.html
Copyright © 2011-2022 走看看