编写jQuery插件

编写jQuery插件

在园子里有很多关于jQuery插件的文章,尤其 以下2篇文章:

不定义JQuery插件,不要说会JQuery

jQuery插件开发精品教程,让你的jQuery提升一个台阶

这2位大神基础讲的很清楚,在这里就不多说了,主要那个小需求来练练:

需求说明一个标题插件,可以通过后端取数,自定义标题,自定义样式

讨论:插件通常不都是加载一下就不操作了,比如表格插件,加载数据,刷新等等。

今天练习的控件就简单给大家理理写控件的思路,(有问题,有意见大家指出。)

; (function ($) {
    $.fn.cyTitle = function (options) {
        //一些操作
        return new cyTitle(options);
    }
    function cyTitle(Options) {
        //这里定义插件属性
        $.extend(this, Options);
        this.init(Options);
    }
    cyTitle.prototype = {
        init: function () {
            //这里构建插件内容
        }
    }
})(jQuery)

每个插件都应该包含以上部分,这个就不多说了(上面2为大神的文章说的很清楚),从实际编写出发。 (demo)

点击加载控件列出标题(未定义标题),点击刷新更改标题(ajax取数)。

下面一步步看代码:

(本来请求txt的结果发现博客园不能上传和请求,放着runjs上也只能是js文件了。。。)

    <div style="border: 1px dotted #888; width: 300px; height: 100px;">
        <input type="button" class="cyTitleCore" title="load" value="加载控件" />
        &nbsp;
    <input type="button" class="cyTitleCore" title="ref" value="刷新" />
        <div id="div1cyTitle"></div>
    </div>
    <script type="text/javascript">
        $(function () {
            $(".cyTitleCore").click(function () {
                core[$(this).attr("title")]();
            })
            var core = {
                load: function () {
                    this.list = $("#div1cyTitle").cyTitle({
                        background: "#888"
                    });
                },
                ref: function () {
                    //这里直接调用插件的ref方法来刷新取数
                    if (this.list) {
                        this.list.ondatabind = function (that, e) {
                            e.url = "Service.js"; //指定取数的url
                            e.params = { //指定取数的参数
                                "id": (+new Date())
                            };
                        }
                        this.list.ref();
                    }
                }
            }
        })
    </script>

上面是加载控件和刷新的调用;

首先点击加载按钮可以看到是调用了插件cyTitle,并且指定背景色。先不看刷新,来看看插件到底怎么写的!

    $.fn.cyTitle = function (options) {
        options = options || {};
        var domEl = this.get(0); //获得绑定元素的dom对象
        if (!domEl) throw "未找到绑定元素!";
        if (domEl["cyTitle"]) {  //这里如果调用元素的dom对象上有这个控件就直接返回 (避免了在同一个元素上多次调用出BUG)
            return domEl["cyTitle"];
        }
        options.el = domEl; //这里在构建插件的时候直接用this.el就能访问元素的dom对象

        return new cyTitle(options);
    }
    function cyTitle(Options) {
        //这里定义插件属性
        $.extend(this, Options);
        this.ajaxType = "get";
        this.el.cyTitle = this; //把控件放着dom元素的cyTitle属性上
        this.ondatabind = null; //ajax取数的绑定方法
        this.init(Options);
    }
cyTitle.prototype = {
        init: function () {
            this.load(); //加载控件
        },
        load: function () {
            $(this.el).append("<h1>" + (this.text || "未知") + "</h1>"); //如果指定了Options.text就显示指定的内容
            this.ref(); //调用ajax取数(类似与表格插件第一次加载)
        },
        ref: function () {
            this.bgCss();
            var e = {
                url: null
            };
            this.doEvt("ondatabind", e); //这里调用前面定义的取数方法的内容(url, params)
            //依次类推我们可以写绑定前(在绑定方法前面调用),绑定后(执行异步后调用) 等等
            if (e.url) {
                var my = this;
                $[this.ajaxType](e.url, e.params, function (res) {
                    if (res) {
                        $(my.el).find("h1").text(res);
                    }
                },‘html‘);
            }
        },
        doEvt: function (name, p) {
            if (this[name]) {
                this[name](this, p);
            }
            return this;
        },
        bgCss: function () {
            $(this.el).css("background", this.background);
        }
    };

以上就是整个插件的内容,

优点:

  1. 在用一个元素上绑定n次都不会出现错误。
  2. 可以自定义取数,从新加载数据。
  3. 可以在原型上扩张,自己需要的功能。

用一个demo练习编写插件,才知道其中的乐趣,先说到这里。谢谢

实在忙,最近搞了个girhub.io博客写了个滚动条插件。有兴趣的可以看看内涵demo

时间: 2025-01-18 11:45:18

编写jQuery插件的相关文章

第七章(插件的使用和写法)(7.6 编写 jQuery 插件)

7.6.1 插件的种类 编写插件的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护和提高开发效率. jQuery 的插件主要分为3种类型. 1 封装对象方法的插件 这种插件是将对象方法封装起来,用于对通过选择器获取的 jQuery 对象进行操作,是最常见的一种插件. 据不完全统计,95%以上的 jQuery 插件都是封装对象方法的插件,此类插件可以发挥出 jQuery 选择器的强大优势.有相当一部分的 jQuery 的方法,都是在 jQuery 脚本库内部通过这种

自己编写jQuery插件 之 菜单折叠

菜单折叠这个功能很简单,很多人都有写过,只因它在项目中使用实在是太频繁了.代码就那么几行,没什么讲的,这里只是将其封装成插件而已. Html代码如下: <div class="box"> <p>菜单一</p> <ul> <li><a>1111</a></li> <li><a>1111</a></li> <li><a>11

自己编写jQuery插件 之 表单验证

吐个嘈先:最近状态不咋滴,真是什么都不想干,不想上班,做什么都没动力,觉得没意思.不想这样,不想这样,快让这种情绪消失吧,忽忽.... 表单验证在项目中用的还是比较多的,公司当前正在做的项目就要用到,故此写了此插件,先给大家看下在项目中应用的效果图吧: 直接上插件实现代码了,围绕代码进行讲解比较容易点: /* 描述:基于jquery的表单验证插件. 时间:2014-8-3 作者:similar([email protected]) */ (function ($) { $.fn.checkFor

编写jQuery插件的方法

声明:详细内容请看<<锋利的jquery>>这本书 这里没对自定义选择器作介绍 因为我感觉jQuery已经为我们定义足够的选择器已经满足使用 <!DOCTYPE html> <html > <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>编写jquery插件<

编写jQuery插件(一)——插件约定及插件中的闭包

编写插件的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,提高开发效率和方便后期维护. 在编写jQuery插件的时候,我们一般会遵循一些约定: jQuery插件推荐命名为:jquery.插件名.js. 所有对象方法都应当附加到jQuery.fn对象上,而所有的全局函数都应当附加到jQuery对象本身上. 在插件内部,this指向的是当前通过选择器获取的jQuery对象:而一般的方法如click()方法,内部的this指向的是DOM元素. 所有的方法或函数插件,都应当以分号结尾

手动编写JQUERY插件

就拿一个简单的示例来说,鼠标点击输入框,提示文字消息,鼠标移开,再显示提示文字. <script type="text/javascript"> //编写插件 (function ($) { $.fn.placeholder = function (option) { var input = this; input.focus(function () { if (input.val() == "" || input.val() == option.Def

如何编写JQuery 插件详解

转载自:http://blog.sina.com.cn/s/blog_6154bf970101jam7.html 如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jquery的插件机制,jquery有着成千上万的第 三方插件,有时我们写好了一个独立的功能,也想将其与jquery结合起来,可以用jquery链式调用,这就要扩展jquery,写成插件形式

如何编写jQuery插件

要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择. 本教程可能不是最精品的,但一定是最细致的. jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,

编写jQuery插件(二)——jQuery插件类型和机制

jQuery插件类型 jQuery插件主要有3种类型: 1.封装对象方法的插件 这种插件类型是最常见的一种插件,它将对象方法封装起来,对通过选择器获取的jQuery对象进行操作. 2.封装全局函数的插件 这种插件将独立的函数加到jQuery命名空间之下.如解决冲突用的jQuery.noConflict()方法,常用的jQuery.ajax()和jQuery.trim()方法等. 3.选择器插件 虽然jQuery的选择器十分强大,但还是会需要扩充一些自己喜欢的选择器,如用color(red)来选择