/** * @author ZhangHuihua@msn.com * */ (function($){ $.fn.extend({ /** * options: reverse[true, false], eventType[click, hover], currentIndex[default index 0] * stTab[tabs selector], stTabPanel[tab panel selector] * ajaxClass[ajax load], closeClass[close tab] */ tabs: function (options){ var op = $.extend({reverse:false, eventType:"click", currentIndex:0, stTabHeader:"> .tabsHeader", stTab:">.tabsHeaderContent>ul", stTabPanel:"> .tabsContent", ajaxClass:"j-ajax", closeClass:"close", prevClass:"tabsLeft", nextClass:"tabsRight"}, options); return this.each(function(){ initTab($(this)); }); function initTab(jT){ var jSelector = jT.add($("> *", jT)); var jTabHeader = $(op.stTabHeader, jSelector); var jTabs = $(op.stTab + " li", jTabHeader); var jGroups = $(op.stTabPanel + " > *", jSelector); jTabs.unbind().find("a").unbind(); jTabHeader.find("."+op.prevClass).unbind(); jTabHeader.find("."+op.nextClass).unbind(); jTabs.each(function(iTabIndex){ if (op.currentIndex == iTabIndex) $(this).addClass("selected"); else $(this).removeClass("selected"); if (op.eventType == "hover") $(this).hover(function(event){switchTab(jT, iTabIndex)}); else $(this).click(function(event){switchTab(jT, iTabIndex)}); $("a", this).each(function(){ if ($(this).hasClass(op.ajaxClass)) { $(this).click(function(event){ var jGroup = jGroups.eq(iTabIndex); if (this.href && !jGroup.attr("loaded")) jGroup.loadUrl(this.href,{},function(){ jGroup.find("[layoutH]").layoutH(); jGroup.attr("loaded",true); }); event.preventDefault(); }); } else if ($(this).hasClass(op.closeClass)) { $(this).click(function(event){ jTabs.eq(iTabIndex).remove(); jGroups.eq(iTabIndex).remove(); if (iTabIndex == op.currentIndex) { op.currentIndex = (iTabIndex+1 < jTabs.size()) ? iTabIndex : iTabIndex - 1; } else if (iTabIndex < op.currentIndex){ op.currentIndex = iTabIndex; } initTab(jT); return false; }); } }); }); switchTab(jT, op.currentIndex); } function switchTab(jT, iTabIndex){ var jSelector = jT.add($("> *", jT)); var jTabHeader = $(op.stTabHeader, jSelector); var jTabs = $(op.stTab + " li", jTabHeader); var jGroups = $(op.stTabPanel + " > *", jSelector); var jTab = jTabs.eq(iTabIndex); var jGroup = jGroups.eq(iTabIndex); if (op.reverse && (jTab.hasClass("selected") )) { jTabs.removeClass("selected"); jGroups.hide(); } else { op.currentIndex = iTabIndex; jTabs.removeClass("selected"); jTab.addClass("selected"); jGroups.hide().eq(op.currentIndex).show(); } if (!jGroup.attr("inited")){ jGroup.attr("inited", 1000).find("input[type=text]").filter("[alt]").inputAlert(); } } } }); })(jQuery);