2

我想知道是否有可能创建某种可以执行以下操作的构造:

$("some element").somemethod(arg), 这和说的完全一样$.somemethod("some element", arg)

我知道可以使用,例如,$(selector).each(callback)在 jquery 中,它似乎相当于$.each(selector, callback). 不过,我发现很难理解 jquery 是如何做到这一点的。似乎方法“each”被定义了两次,但这是我想避免的。这可能吗?

4

3 回答 3

5

它们被定义了两次,但实际完成工作的代码只编写一次。

$.myPlugin = function(element,text){
    $(element).text(text); // work is done here
    return element;
}
$.fn.myPlugin(function(text) {
    return $.myPlugin(this,text);
});

这是一个在 jQuery 核心中使用的示例:

https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L250

于 2013-05-16T15:13:33.320 回答
3

是的,这是可能的,您必须为此实现自己的插件。

(function( $ ) {
    $.fn.somemethod = function() {
        return this.each(function() {
            // do something to each element here
        });
    };
}( jQuery ));
于 2013-05-16T15:11:50.083 回答
0

你的意思是这样的:


function $(context){
    this.context = context;
    if(!(this instanceof $)) return new $(context);
}

$.prototype.somemethod = function(arg){
    // The bulk of the function is defined here, only once
    console.log("Doing some stuff to " + this.context + " with " + arg);
}

$.somemethod = function(context, arg){
    $(context).somemethod(arg);
}

$('body').somemethod(7); // Doing some stuff to body with 7
$.somemethod('body', 7); // Doing some stuff to body with 7
于 2013-05-16T15:10:52.593 回答