从带有命名空间的JQuery插件返回数据

时间:2014-09-06 22:23:01

标签: jquery

我想创建一个使用命名空间的JQuery插件。这就是我尝试创建一个返回html的简单函数:

(function($) {
    $.fn.ns = function () {
        return {
            foo1: function(){
               var element = $(this);
               $(element).html('<b>hello</b>');
               return this;
            }
       }
    };
})(jQuery);

因此命名空间应该被称为ns。

应填写这个简单的div:

<div class="sayHello"></div>

这样称呼它似乎不起作用:

$(".sayHello").ns().foo1();

我在这里做错了什么?

JSFiddle:http://jsfiddle.net/CVrFU/475/

1 个答案:

答案 0 :(得分:0)

通过这种方式,必须有closure个元素。

(function($) {
    $.fn.ns = function () {
        var self = this,
            element = $(this);

        return {
            foo1: function(){
               $(element).html('<b>hello</b>');
               return self;
            }
       }
    };
})(jQuery);

为了保存this还有一个很薄的方法,有几种方法:

(function($) {
    var foo1 = function(){
       $(this).html('<b>hello</b>');
       return this;
    } 


    $.fn.ns = function () {
        var self = this;

        return {
            foo1: function () {
               return foo1.apply(self, arguments);
            }
       }
    };
})(jQuery);

通过这种方式,您不必总是重新创建函数,只在需要的上下文中运行它。

http://jsfiddle.net/q303xwob/

但是如果你想保存jQuery链接,你应该在fn对象中传递你的所有方法(在这个例子中是ns和foo1)。