//------------- PS_DOM 功能函数 start----------------
var PS_DOM ={
indexOf: function(arr, e){
for(var i= 0; i<arr.length; i++){
if(arr[i]===e) return i;
}
return -1;
},
addClass: function(o,cls){
var arrCls = o.className.split(" ");
if( this.indexOf(arrCls,cls)==-1) {arrCls.push(cls); o.className =arrCls.join(" ").replace(/(^\s*|\s*$)/g,"");}
},
removeClass: function(o, cls){
var arrCls = o.className.split(" "),i;
if( (i=this.indexOf(arrCls,cls))!== -1){
arrCls[i]="";
o.className = arrCls.join(" ");
}
},
hasClass: function(o,cls){
var arrCls = o.className.split(" ");
return (this.indexOf(arrCls,cls)==-1) ? false : true;
},
$byClass: function(clsName,root,tag){
if(root){
if(typeof root=='string') root=document.getElementById(root);
}else{
root=document.body;
}

tag=tag||'*';
var arr=[],eles;
eles=root.getElementsByTagName(tag);

for(var i=0,n=eles.length;i<n;i++){
if(this.hasClass(eles[i], clsName)) arr.push(eles[i]);
}

return arr;
}
};
//------------- PS_DOM 功能函数 end ----------------

//--------------------- Tab类 start ------------------
function Tab(config){
this.root=config.root;
this.active_class=config.active_class;
var trigger=config.trigger?config.trigger:'click';
var tabCls = config.tabCls || 'tab-menu',
tabConCls = config.tabConCls || 'tab-content',
tabTag = config.tabTag || '*',
tabConTag = config.tabConTag || '*';

//获得tab_menus tab_contents
this.tab_menus=PS_DOM.$byClass(tabCls,this.root, tabTag);
this.tab_contents=PS_DOM.$byClass(tabConCls,this.root, tabConTag);
var len=this.tab_menus.length;
var menu_active=config.menu_active;

//若指定了默认激活的选项卡 则激活之
if(menu_active>1 && menu_active<=len){
this.activeMenu(menu_active-1); //index=menu_active-1
this.menu_active_index=menu_active-1;
}else{
this.menu_active_index=0;
}
var that=this;
//循环遍历 设置 tab-menu _index属性 和 点击事件监听器
for(var j=0;j<len;j++){
this.tab_menus[j]._index=j;
this.tab_menus[j]['on'+trigger]=(function(k){return function(){that.activeMenu(k)};})(j);}

}

Tab.prototype={
activeMenu:function(index){
for(var m=0;m<this.tab_menus.length;m++){
if(m!=index && PS_DOM.hasClass(this.tab_menus[m],this.active_class[0])){
PS_DOM.removeClass(this.tab_menus[m],this.active_class[0]);
PS_DOM.removeClass(this.tab_contents[m],this.active_class[1]);
}

if(index==m && (! PS_DOM.hasClass(this.tab_menus[m],this.active_class[0]) ) ){
PS_DOM.addClass(this.tab_menus[m],this.active_class[0]);
PS_DOM.addClass(this.tab_contents[m],this.active_class[1]);
}
}
}
};

// 调用示例:var mytab=new Tab({root:$id('mytab'),tabCls:'tab', tabConCls:'con', tabTag:'a', tabConTag:'div', trigger:'click',menu_active:1,active_class:['tab_menu_active','tab_content_active']});

//-----------------------------------------------------  jQuery版本的Tab -----------------------------

function Tab(config){
var tabDiv = config.tabDivSelector || 'mytab',
tabCls = config.tabCls || 'tab',
conCls = config.conCls || 'con',
activeCls = config.activeCls || 'on';
trigger = config.trigger || 'click';

var tabs = $('.' +tabCls, tabDiv).eq(0).siblings('.'+tabCls).andSelf(),  // ~~~当tabCon内再嵌套一个 选项卡 则会有问题,这里修正一下
cons = $('.'+conCls, tabDiv).eq(0).siblings('.'+conCls).andSelf();
//定义事件处理函数
tabs.bind(trigger,function(){
var clkIdx = $('.' +tabCls, tabDiv).index(this);
$(this).addClass(activeCls).siblings().removeClass(activeCls);
cons.eq(clkIdx).addClass(activeCls).siblings().removeClass(activeCls);
});
}
$.extend({'Tab':Tab});

$.Tab({tabDiv:'#tabDiv', tabCls:'tab', conCls:'tabCon',activeCls:'on'});

自己写的一个简单的Tab类的更多相关文章

  1. 用PHP写的一个简单的分页类 1.0版

    <?php /* 分页类 用于实现对多条数据分页显示 version:1.0 author:Knight E-Mail:S.Knight.Work@gmail.com Date:2013-10- ...

  2. 用PHP写的一个简单的分页类 2.0版

    <?php /* 分页类 用于实现对多条数据分页显示 version:2.0 //基于1.0 数据库查询用mysqli实现 author:Knight E-Mail:S.Knight.Work@ ...

  3. 只是一个用EF写的一个简单的分页方法而已

    只是一个用EF写的一个简单的分页方法而已 慢慢的写吧.比如,第一步,先把所有数据查询出来吧. //第一步. public IQueryable<UserInfo> LoadPagesFor ...

  4. Python之自定义封装一个简单的Log类

    参考:http://www.jb51.net/article/42626.htm 参考:http://blog.csdn.net/u011541946/article/details/70198676 ...

  5. 写了一个简单可用的IOC

    根据<架构探险从零开始写javaweb框架>内容写的一个简单的 IOC 学习记录    只说明了主要的类,从上到下执行的流程,需要分清主次,无法每个类都说明,只是把整个主线流程说清楚,避免 ...

  6. 写了一个简单的 Mybatis

    写了一个简单的 Mybatis,取名 SimpleMybatis . 具备增删改查的基本功能,后续还要添加剩下的基本数据类型和Java集合类型的处理. 脑图中有完整的源码和测试的地址 http://n ...

  7. VC++ 一个简单的Log类

    在软件开发中,为程序建立Log日志是很必要的,它可以记录程序运行的状态以及出错信息,方便维护和调试. 下面实现了一个简单的Log类,使用非常简单,仅供参考. // CLogHelper.h : hea ...

  8. 写了一个简单的CGI Server

    之前看过一些开源程序的源码,也略微知道些Apache的CGI处理程序架构,于是用了一周时间,用C写了一个简单的CGI Server,代码算上头文件,一共1200行左右,难度中等偏上,小伙伴可以仔细看看 ...

  9. python+selenium之自定义封装一个简单的Log类

    python+selenium之自定义封装一个简单的Log类 一. 问题分析: 我们需要封装一个简单的日志类,主要有以下内容: 1. 生成的日志文件格式是 年月日时分秒.log 2. 生成的xxx.l ...

随机推荐

  1. 男装电子零售商East Dane即将面世_衣装_YOKA时尚网

    男装电子零售商East Dane即将面世_衣装_YOKA时尚网 男装电子零售商East Dane即将面世

  2. 【Android界面实现】信息更新小红点显示——自己定义控件BadgeView的使用介绍

    在如今大部分的信息公布类应用,都有这样的一个功能:当后台数据更新,比方有系统消息或者是用户间有互动的时候,通过在控件上显示一个小红点来提示用户有新的信息.一般来说,这样的业务需求,我们能够在布局文件里 ...

  3. 简单的web三层架构系统【第四版】

    上一次写了第三版, 因为之前无意之间看到一段视频,说是把系统中所有的SQL语句都做成存储过程.可以在很大程度上优化系统的SQL执行速度.所以百度了一下细节问题,之后我把所有的SQL语句,都做成了存储过 ...

  4. mysql安装详细步骤图解

    本文转自http://blog.csdn.net/fanyunlei/article/details/21454645 别看图多,其实mysql的安装十分简单,一路next即可,只是注意倒数第三步,设 ...

  5. js限制图片的大小

    <form id="financialForm" action="<%=basePath%>riskcontrol/website/review_bor ...

  6. Git使用方法记录(一)

    记录下git的基本使用方法,这里是以ubuntu14.04为例. 1,使用前的初始设置 git config –global user.name “FirstName LastName” git co ...

  7. c++ cout 保留小数点位

    需要头文件 <iomanip> 输出时需要用 fixed 和 setprecision() fixed代表输出浮点数,setprecision()设置精度. #include <io ...

  8. Runtime.exec使用错误导致延迟.md

    这篇文章是纪录了一个bug解决的过程,可是我还是没有可以真正地找出bug的缘由.希望大牛可以详解. 问题的发现 当接触的系统越来越大的时候,对于系统的性能越来越高的时候,找到表面问题的真正原因就慢慢地 ...

  9. android经常使用的电话操作

    给大家分享一下我的一个Android工具类,能够获取手机里面的各种信息,包含拨打电话. 获取全部联系人姓名及电话,插入联系人姓名及电话,插入联系人姓名及电话.插入通话记录.获取用户全部短信.批量插入短 ...

  10. 移动开发语言Swift

    苹果公布了全新的编程语言Swift,Swift继承了Objective-C语言特性,并从Python和Java Script中长处,使Swift更易读.未来swift编程语言的会特大广大的使用 Swi ...