jQuery命名空间并使用“this”

时间:2012-08-28 13:47:50

标签: javascript jquery plugins

我的对象/功能范围和对某些事物的一般理解有问题。我正在调用doc中的jQuery函数,如下所示:

$("#interactiveQA .actionTile").on('click',function(){
    $(this).activeTiles("init");
});

然后我在这里创建脚本:

(function($) {

    var methods = {
        init: function() {
            var tileClicked = $(this).attr('id');
        }
    };

    $.fn.activeTiles = function(method) {

        // Method calling logic
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.slider');
        }
    };

})(jQuery);

以下是我要找的内容。尽可能在技术上,你能解释为什么var tileClicked = $(this)attr('id')在当前位置不起作用吗?你能否详细解释一下你将采取哪些不同的做法或最佳做法等?

3 个答案:

答案 0 :(得分:5)

错字:

$(this).attr('id');

请注意.

答案 1 :(得分:1)

这通常是我尝试设置插件的构造函数的方法:

$.fn.whatever = function (method) {
    var args = arguments;
    var argss = Array.prototype.slice.call(args, 1);

    return this.each(function () {
        $this = $(this);
        if (methods[method]) {
            methods[method].apply($this, argss);
        }
        else if (typeof method === "object" || !method) {
            methods.init.apply($this, args);
        }
        else {
            $.error("Method " + method + " does not exist on jQuery.whatever");
        }
    });
};

我不确定它是否能解决您的问题,但我过去没有遇到过麻烦......

答案 2 :(得分:0)

如果你的this init已经是jQuery对象了,也许你不应该使用$(this),而是简单地写this,如下所示:

     init : function( ) { 
       var tileClicked = this.attr('id');
     }