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. transition和animation区别

    Transform:对元素进行变形: Transition:对元素某个属性或多个属性的变化,进行控制(时间等),类似flash的补间动画.但只有两个关键贞.开始,结束. Animation:对元素某个 ...

  2. 20154312 曾林 Exp5_MSF基础应用

    --目录-- MSF渗透测试-CVE-2017-11882 1.基础内容回答 2.实践过程记录 2.1.主动攻击实践-ms08_067 2.2.针对浏览器的攻击-ms10_046 2.3.针对客户端的 ...

  3. Linux基础命令---bzcat

    bzcat 解压缩被bzip2压缩过的文件,将文件解压到标准输出,此命令只有一个选项-s.该指令对压缩过的二进制文件没有意义,因为二进制文件没有可读性. 此命令的适用范围:RedHat.RHEL.Ub ...

  4. MySQL用sql复制表数据到新表的方法

    用sqlyog无法直接复制出一个不同表名的表来,只能copy到其他库上同名的表. 在MySQL数据库中,应该如何用sql将表数据复制到新表中呢? 本人通过试验测试成功了,而且相当简单易懂,速度也非常快 ...

  5. Java系列笔记(5) - 线程

    我想关注这个系列博客的粉丝们都应该已经发现了,我一定是个懒虫,在这里向大家道歉了.这个系列的博客是在我工作之余写的,经常几天才写一小节,不过本着宁缺毋滥的精神,所有写的东西都是比较精炼的.这篇文章是本 ...

  6. (一)MySQL登录与退出

    mysql登陆: win+r输入cmd按enter进入命令行界面: > mysql -uroot -p -P3306 -h127.0.0.1 > 输入密码后按回车 mysql退出: mys ...

  7. spring mybatis 3.2调用mysql存储过程返回多结果集(完整、亲测、可用)

    最近,有个开发提了个需求,希望中间件支持调用mysql存储过程时支持多结果集返回,因为某些原因我们使用了不少的存储过程,很多复杂的逻辑目前来看交互非常的多,所以从当前的现状来说,这个需求还是蛮合理的. ...

  8. 20145227鄢曼君《网络对抗》shellcode注入&Return-to-libc攻击深入

    20145227鄢曼君<网络对抗>shellcode注入&Return-to-libc攻击深入 shellcode注入实践 shellcode基础知识 Shellcode实际是一段 ...

  9. [c/c++]指针(3)

    在指针2中提到了怎么用指针申配内存,但是,指针申配的内存不会无缘无故地 被收回.很多poj上的题都是有多组数据,每次地数组大小会不同,所以要重新申请 一块内存.但是原来的内存却不会被收回,也是说2.3 ...

  10. thinkphp中的Ueditor的使用, 以及如何传递编辑器内容到后台?

    在线编辑器有很多很多, 而且大多是开源的. uediotr基于mit协议, 开源, 可以用于商业和非商业的 任意使用和修改都可以 如果两个相连接的 相邻的 元素之间 因为边框重叠 而显得中间的边框线很 ...