• 手把手教你开发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;

      });

  • 相关阅读:
    JavaScript 简介
    数据库的链接语句
    sqlserver 大杂烩
    数据库操作
    Filter Big Picture
    struts2配置有命名空间的Action: 解决No configuration found for the specified action错误
    Firefox的Firebug调试
    jQuery判断元素显示或隐藏, is 函数
    Jsp Tag
    java revisit
  • 原文地址:https://www.cnblogs.com/pengpeng1208/p/9099221.html
Copyright © 2020-2023  润新知