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;

  });

手把手教你开发jquery插件的更多相关文章

  1. 手把手教你开发jquery插件(三)

    First, i want to add options to Tabs constructor like this: var tabs = $("div.tabs").tabs( ...

  2. 教你开发jQuery插件(转)

    教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文: ...

  3. 【转】教你开发jQuery插件

    阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文:http://www.cnblo ...

  4. 教你开发jQuery插件

    jQuery插件开发模式 软件开发过程中是需要一定的设计模式来指导开发的,有了模式,我们就能更好地组织我们的代码,并且从这些前人总结出来的模式中学到很多好的实践. 根据<jQuery高级编程&g ...

  5. 开发JQuery插件(转)

    教你开发jQuery插件(转)   阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原 ...

  6. 手把手教你开发chrome扩展

    转载:http://www.cnblogs.com/walkingp/archive/2011/04/04/2003875.html 手把手教你开发chrome扩展一:开发Chrome Extenst ...

  7. 手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单   手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩 ...

  8. 手把手教你开发Chrome扩展三:关于本地存储数据

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 HTML5 ...

  9. 手把手教你开发Chrome扩展二:为html添加行为

    手把手教你开发chrome扩展一:开发Chrome Extenstion其实很简单 手把手教你开发Chrome扩展二:为html添加行为 手把手教你开发Chrome扩展三:关于本地存储数据 上一节我们 ...

随机推荐

  1. wordpress 修改域名后的403

    wordpress的好处就是方便,不好呢,额,反正就是有. 最近,修改域名,也遇到了这个问题[修改域名后,出现403]. 网上的办法似乎有很多,但有一些并不好,比如修改数据库什么的,如果是新手,数据库 ...

  2. zw版【转发·台湾nvp系列Delphi例程】HALCON Roberts2

    zw版[转发·台湾nvp系列Delphi例程]HALCON Roberts2 procedure TForm1.Button1Click(Sender: TObject);var op: HOpera ...

  3. Object-C-Foundation-NSNuber

    NSNumber 是一个数值类型封装起来的数值. 装箱:基础类型->对象类型 NSNumber *number=[NSNumber numberWithInt:12]; 拆箱:对象类型-> ...

  4. 返回xml过长时被nginx截断的解决办法

    返回xml过长时被nginx截断的解决办法 问题描述:通过网页获取数据,数据格式为xml.当xml比较短时,可以正常获取数据.但是xml长度过长时不能正常获取数据,通过观察返回数据的源代码,发现xml ...

  5. redis 主从同步搭建

    redis 一主二从 1.redis 安装 安装教程:https://www.cnblogs.com/zwcry/p/9505949.html 2.redis主从 1)创建主从目录 mkdir /us ...

  6. sql server deadlock跟踪的四种方法

    最近写程序常会遇到deadlock victim,每次一脸懵逼.研究了下怎么跟踪,写下来记录下. 建测试数据 CREATE DATABASE testdb; GO USE testdb; CREATE ...

  7. STM32f103C8T6 Bootloader设计(转)

    源:STM32f103C8T6 Bootloader设计 STM32F103c8t6通过串口实现IAP在线升级固件

  8. Python Web学习笔记之进程与线程

    要了解二者的区别与联系,首先得对进程与线程有一个宏观上的了解. 进程,是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竟争计算机系统资源的基本单位.每一个进程都有一个自己的地址空 ...

  9. bzoj1638 / P2883 [USACO07MAR]牛交通Cow Traffic

    P2883 [USACO07MAR]牛交通Cow Traffic 对于每一条边$(u,v)$ 设入度为0的点到$u$有$f[u]$种走法 点$n$到$v$(通过反向边)有$f2[v]$种走法 显然经过 ...

  10. 深入JAVA注解之方法注解

    以获取数据库连接为例,建立maven项目 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=" ...