手把手教你開發jquery外掛(二)
I have said that i dislike jQuery UI’s unified API, so i want to
get the instance of the component after invoke like this:
$(function() { var tabs = $("div.tabs").tabs(); // Note: Now tabs is the instance of the component window.setTimeout(function() { tabs.clickTab(2); }, 2000); });
To achieve this, i modified the plugin code:
(function($) { function Tabs(tabs, panes) { var that = this; this.tabs = tabs; this.panes = panes; this.current = 0; this.clickTab(0); this.tabs.click(function() { that.clickTab(that.tabs.index(this)); }); } Tabs.prototype = { clickTab: function(index) { this.current = index; this.tabs.removeClass("current").eq(this.current).addClass("current"); this.panes.hide().eq(this.current).show(); } }; $.fn.tabs = function() { var tabs = this.children("ul").find("li > a"); var panes = this.children("div"); return new Tabs(tabs, panes); }; })
Note that Tabs is defined in the self-execution function, so it will be hidden
from the outside world.
And we public the clickTab metod in the prototype. I works well.
This article is over, below is some advance topics.
====================================================
How to extend Tabs class?
It maybe a little difficult because it’s a private function.
Never mind, just change the prototype of $.fn.tabs:
(function($) { function Tabs(tabs, panes) { // ... } Tabs.prototype = { // ... }; $.fn.tabs = function() { // ... }; $.fn.tabs.prototype = Tabs.prototype; });
We can extend the Tabs class like this:
$.fn.tabs.prototype.getLength = function() { return this.tabs.length; }; $(function() { var tabs = $("div.tabs").tabs(); alert(tabs.getLength()); });
Or we can use the method introduced in jQuery core, which is described in
my last post.
(function($) { $.fn.tabs = function() { var tabs = this.children("ul").find("li > a"); var panes = this.children("div"); return new $.fn.tabs.prototype.init(tabs, panes); }; $.fn.tabs.prototype = { init: function(tabs, panes) { var that = this; this.tabs = tabs; this.panes = panes; this.current = 0; this.clickTab(0); this.tabs.click(function() { that.clickTab(that.tabs.index(this)); }); }, clickTab: function(index) { this.current = index; this.tabs.removeClass("current").eq(this.current).addClass("current"); this.panes.hide().eq(this.current).show(); } }; $.fn.tabs.prototype.init.prototype = $.fn.tabs.prototype; });
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/506/viewspace-2800836/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 手把手教你開發jquery外掛(三)jQuery
- 手把手教你開發 MyBatis 分頁外掛MyBatis
- 手把手教你開發微信小程式中的外掛微信小程式
- 「jQuery外掛開發日記」(二)高階外掛理念 – [翻譯]jQuery
- jQuery外掛開發模式jQuery模式
- jquery外掛開發方法jQuery
- jquery外掛開發例項jQuery
- jQuery外掛開發全解析jQuery
- jQuery外掛開發模式詳解jQuery模式
- jQuery外掛:jqGrid使用(二)jQuery
- jQuery外掛開發流程簡單介紹jQuery
- 手把手教你寫一個 VSCode 外掛VSCode
- jQuery外掛的二種型別jQuery型別
- 深入理解jQuery外掛開發總結(三)jQuery
- 深入理解jQuery外掛開發總結(一)jQuery
- VS Code外掛開發介紹(二)
- Vite 實戰:手把手教你寫一個 Vite 外掛Vite
- jQuery外掛jQuery
- 掌握jQuery外掛開發,這篇文章就夠了jQuery
- jQuery外掛開發中$.extend和$.fn.extend辨析jQuery
- 移動開發必備!15款jQuery Mobile外掛移動開發jQuery
- 精美jQuery外掛及原始碼 前端開發福利啦!jQuery原始碼前端
- 手把手教你如何簡單使用laravel Modules寫外掛(1)Laravel
- 從頭開發一個Flutter外掛(二)高德地圖定位外掛Flutter地圖
- Grafana的Datasource外掛開發實踐二Grafana
- jquery 外掛站jQuery
- 【開發指南】(二)Ionic3開發工具外掛推薦
- [外掛擴充套件]jQuery二維碼外掛0.2【更新瀏覽器相容】套件jQuery瀏覽器
- 第8章 高效開發和使用外掛 (二)
- JQuery模板外掛-jquery.tmpljQuery
- 一篇文章,教你學會Vue CLI 外掛開發Vue
- Flutter外掛開發Flutter
- Mybatis外掛開發MyBatis
- Webstorm 外掛開發WebORM
- flutter 外掛開發Flutter
- 開發Rhino外掛
- chrome 外掛開發Chrome
- 手把手教你“開發GTA6”