• Step by step to create a jQuery tabs plugin 2


    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);
            }; 
    
        })(jQuery);

    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; 
    
        })(jQuery);

    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);
  • 相关阅读:
    经常使用排序算法
    windows和Linux内存的对齐方式
    Oracle实现数据不存在则插入,数据存在则更新(insert or update)
    hysbz 2243 染色(树链剖分)
    HDU 3864 D_num Miller Rabin 质数推断+Pollard Rho大整数分解
    逆序排列
    PHP盛宴——经常使用函数集锦
    怎样 TabHostFragment自己定义 tab键(indicator)
    不是IT圈人的IT创业优劣势!
    2星|汪丁丁《经济的限度》:访谈文字稿+几篇偏专业的文章,不适合无经济学专业背景知识的读者阅读
  • 原文地址:https://www.cnblogs.com/sanshi/p/1510375.html
Copyright © 2020-2023  润新知