2010-01-24 65 views
2

我想創建一個jQuery插件,我想有以下幾種選擇:jQuery插件語法

  1. $.plugin_name(variable)

  2. $(selector).plugin_name(variable)

第一種情況的插件會不需要應用於元素(例如可以創建一個元素)第二種情況相同的插件將執行所選元素的任何操作

我的問題是:

if (selector is not given) { 
    create an element 
} else { 
    (for example) insert variable in elements matching the selector 
} 
+0

我其實是想知道,有一種方法來創作一個插件,可以做... 在沒有給出選擇器的情況下它會創建一個元素...所以理想情況下它可以被稱爲$ .pluginName()或$(selector).pluginName ()不是或者。 謝謝 – salmane 2010-01-24 02:10:42

+0

這是不可能的,至少這是我的理解。 – 2010-01-24 02:17:01

+0

可能的重複[我想了解jQuery插件語法](http://stackoverflow.com/questions/4484289/id-like-to-understand-the-jquery-plugin-syntax) – 2011-07-05 05:50:38

回答

9

您可以使用jQuery.fn.myPluginName = function()....爲jQuery的對象進行操作的插件:我怎麼插件這裏面指定。

對於jQuery名稱空間中的獨立函數,您可以只設置jQuery.func_name = function()...

一個例子:

jQuery.fn.erase = function() { 
    return this.each(function() { 
     jQuery(this).remove(); 
    }); 
}; 

jQuery("body").erase(); 

jQuery.erase = function(element) { 
    jQuery(element).erase(); 
}; 

jQuery.erase("body"); // exact same result. 
2

爲了覆蓋$.plugin_name()使用:

jQuery.plugin_name = function(data) { 
    // do stuff 
} 

對於$(selector).plugin_name()使用:

jQuery.fn.plugin_name = function() { 
    return this.each(function() { 
    // do stuff 
    }); 
}; 

參見Plugins/Authoring

4

通過使用$.myFunc,您只需向jQuery名稱空間添加一個函數即可。

通過使用$.fn.myFunc,要擴展jQuery的原型,這意味着該的功能將代表jQuery對象內該關鍵字從選擇器返回。

如果你想他們兩個做同樣的事情,你可以檢查jQuery的實例,並創建一個新的元素:

試試這個:

$.myFunc = $.fn.myFunc = function(first, second) { 
    if (!(this instanceof $)) { 
     return $.fn.myFunc.apply($('<div>'), arguments); 
    } 
    // begin plugin code here: 
    return this.each(function() { 
     $(this).text(first + ' ' + second); 
    }); 
}; 

// now you can call myFunc in two ways: 

$('<div>').myFunc('foo','bar').appendTo('body') 

$.myFunc('bar','foo').appendTo('body');