通常,咱們對Jquery的擴展有兩種形式javascript
插件擴展通常是依賴Dom節點的,也就是咱們常見的插件啓動每每是這種形式的:css
$('#target').plugin(options);
工具是不依賴Dom節點的,如 $.extend()、 $.parseJSON() 方法。java
一個典型的Jquery插件通常會包含以下幾部分:git
在Jquery插件核心實現的外層設計上,每每遵循如下設計:github
首先會在覈心實現代碼最外部套上閉包
(function($){ //implemention code for plugin ... })(Jquery);
即給閉包傳入Jquery對象來初始化$參數,從而避免在插件的代碼實現中用到的$變量與其餘框架中的$衝突, 同時也將插件實現時定義的變量與外部上下文環境解耦出來,避免變量污染。框架
接着開始在fn命名空間中註冊插件函數函數
(function($){ $.fn.插件名字 = function(customizeOptions){ //coding ... } })(Jquery);
右邊的閉包實現每每能夠傳入一個customize option, 其會在閉包內部經過extend方法與將用戶自定義配置與默認選項合併工具
(function($){ $.fn.插件名字 = function(customizeOption){ var defaultOption = { a: xxx, b: xxx, ... }; var option = $.extend({}, defaultOption, customizeOption); } })(Jquery);
接着你能夠經過this.each來迭代每一個符合css選擇器規則的目標Dom節點, 經過$(this)來訪問插件的單個特定的目標Dom節點所對應的Jquery對象。this
(function($){ $.fn.插件名字 = function(customizeOptions){ var defaultOption = { a: xxx, b: xxx, ... }; var option = $.extend({}, defaultOption, customizeOption); return this.each(function(){ $this = $(this); //implemention coding... }); } })(Jquery);
以上即是Jquery插件的通常外層設計,最後即是須要發揮你的想象來操做$this對象實現各類效果。
最後拓展一下,在jQuery特效插件方面,通常站點有三種組織形式
前兩種形式咱們直接找出相關引用的路徑就能直接摳出效果插件了。 第三種形式咱們能夠嘗試找到DOM的啓動節點,而後全文搜索節點ID每每就能找到插件函數名,咱們能夠上github上搜索一下是否有相應的現成的項目,找不到的話只能按插件的構成一步步去摳出來。