//------------- 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'});

最新文章

  1. x:bind不支持样式文件 或 此Xaml文件必须又代码隐藏类才能使用{x:Bind} 解决办法
  2. Android 捕获异常并在应用崩溃后重启应用
  3. 在QMainWindow中利用多个QDockWidget构成标签页tab(原创)
  4. VMware Workstation and Hyper-V are not compatible. 解决方案
  5. eclipse点击一个变量使相同名称变量高亮显示的方法
  6. Curling 2.0(dfs)
  7. Dijkstra算法and Floyd算法 HDU 1874 畅通工程续
  8. web项目环境搭建(3):搭建Spring+MyBatis
  9. string.Format 指定字符串宽度
  10. CentOS7.3上部署简单的网站(Tomcat)
  11. Ubuntu安装后上网问题,
  12. 6.docker的私用镜像仓库registry
  13. Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题,及处理方法
  14. BroadcastReceiver(广播)的静态注册和动态注册 --Android开发
  15. Navicat连接MySQL,出现2059 - authentication plugin &#39;caching_sha2_password&#39;的解决方案
  16. BZOJ4559 JLOI2016成绩比较(容斥原理+组合数学+斯特林数)
  17. 基于开源SuperSocket实现客户端和服务端通信项目实战
  18. [CoreOS]CoreOS 实战:CoreOS 及管理工具介绍
  19. Bitfinex API
  20. angular.element 动态添加和删除元素

热门文章

  1. [转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的差别
  2. angularJS使用$watch监控数据模型的变化
  3. 汉诺塔 python版
  4. linux之iptable
  5. Jquery dom搜索之siblings()方法
  6. [NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
  7. C++的常量折叠(三)
  8. python列表类型中的陷阱
  9. python 以面向对象的方式创建线程 实现售票系统
  10. HTML+CSS笔记 CSS中级 一些小技巧