Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从具有命名空间的JQuery插件返回数据_Jquery - Fatal编程技术网

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

从具有命名空间的JQuery插件返回数据,jquery,Jquery,我想创建一个使用名称空间的JQuery插件。这就是我尝试创建的返回html的简单函数: (function($) { $.fn.ns = function () { return { foo1: function(){ var element = $(this); $(element).html('<b>hello</b>'); ret

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

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


jsiddle:

以这种方式,其中必须包含with元素

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

        return {
            foo1: function(){
               $(element).html('<b>hello</b>');
               return self;
            }
       }
    };
})(jQuery);
这样,您就不必总是重新创建函数,而只在需要的上下文中运行它


但是,如果要保存jQuery链接,应该在fn对象中传递所有方法(在本例中为ns和foo1)。

jQuery插件有很多教程和样板。建议阅读它们谢谢,但示例二不会“污染”全局名称空间吗?有一个带有就绪回调函数-
(函数($){})
和所有使用
var
声明的变量的上闭包,所以它都保存在这个回调的本地范围内。也许你也应该看看js中的
scope
是如何工作的。这将是有益的,mozilla有一个很好的文档和例子。
$(".sayHello").ns().foo1();
(function($) {
    $.fn.ns = function () {
        var self = this,
            element = $(this);

        return {
            foo1: function(){
               $(element).html('<b>hello</b>');
               return self;
            }
       }
    };
})(jQuery);
(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);