自己写的一个简单的Tab类
//------------- 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'});
最新文章
- x:bind不支持样式文件 或 此Xaml文件必须又代码隐藏类才能使用{x:Bind} 解决办法
- Android 捕获异常并在应用崩溃后重启应用
- 在QMainWindow中利用多个QDockWidget构成标签页tab(原创)
- VMware Workstation and Hyper-V are not compatible. 解决方案
- eclipse点击一个变量使相同名称变量高亮显示的方法
- Curling 2.0(dfs)
- Dijkstra算法and Floyd算法 HDU 1874 畅通工程续
- web项目环境搭建(3):搭建Spring+MyBatis
- string.Format 指定字符串宽度
- CentOS7.3上部署简单的网站(Tomcat)
- Ubuntu安装后上网问题,
- 6.docker的私用镜像仓库registry
- Java读取Unicode文件(UTF-8等)时碰到的BOM首字符问题,及处理方法
- BroadcastReceiver(广播)的静态注册和动态注册 --Android开发
- Navicat连接MySQL,出现2059 - authentication plugin &#39;caching_sha2_password&#39;的解决方案
- BZOJ4559 JLOI2016成绩比较(容斥原理+组合数学+斯特林数)
- 基于开源SuperSocket实现客户端和服务端通信项目实战
- [CoreOS]CoreOS 实战:CoreOS 及管理工具介绍
- Bitfinex API
- angular.element 动态添加和删除元素
热门文章
- [转] 使用SQL脚本查看表空间使用率和使用dba_tablespace_usage_metrics视图的差别
- angularJS使用$watch监控数据模型的变化
- 汉诺塔 python版
- linux之iptable
- Jquery dom搜索之siblings()方法
- [NOIP2013提高组] CODEVS 3287 火车运输(MST+LCA)
- C++的常量折叠(三)
- python列表类型中的陷阱
- python 以面向对象的方式创建线程 实现售票系统
- HTML+CSS笔记 CSS中级 一些小技巧