CSS+JavaScript 实现TabPane页签

本文介绍如何利用 CSS 和 JavaScript 实现 TabPane 的功能,并支持二级嵌套。通过简单的 HTML 结构配合特定的样式和脚本,可以轻松创建交互式的标签页组件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

共同学习,欢迎转载。转载请注明地址【http://blog.youkuaiyun.com/majianan/archive/2008/12/30/3646565.aspx】,谢谢!

 

CSS+JavaScript 实现TabPane页签功能,支持二级tabPane(tabPane嵌套)。

如果标题的长度大于设置的width值,则用“...”来显示。但是FF不支持该效果,由于CSS水平有限,暂时没有修改!-  -

 

效果如下图:


  • 使用前提,在HTML页面中引入一个CSS文件,和一个JavaScript文件。如下:

 

 <HEAD>  
  
<TITLE>Css + Javascript = tabPane</TITLE>
 
  
<META NAME="Author" CONTENT="majianan">
 
  
<script type="text/javascript" src="tabPane.js"></script>
 
    
<link type="text/css" rel="stylesheet"  href="tabPane.css"  />
 
 
</HEAD>

 

引入CSS文件:<link type="text/css" rel="stylesheet"  href="tabPane.css"  />

引入JavaScript文件:<script type="text/javascript" src="tabPane.js"></script>

代码见后

 

  • 对于每一个tab页分别创建一个DIV来显示。例如代码中的"testTabDiv"、"basicInfo"、"btns1"等

 

<BODY>  
     
<div id="testTabDiv" style="width:800px;"></div>
 

<div id="basicInfo" style="padding:8px;">
        
    
<table>
 
        
<tr><td>姓 名:</td><td><input type="text" id="text1" /></td></tr>
 
        
<tr><td>性 别:</td><td><input type="text" id="text2" /></td></tr>
 
        
<tr><td>民 族:</td><td><input type="text" id="text3" /></td></tr>
 
        
<tr><td>学 历:</td><td><input type="text" id="text4" /></td></tr>
          
        
<tr><td>公 司:</td><td><input type="text" id="text5" /></td></tr>
 
        
<tr><td>职 务:</td><td><input type="text" id="text5" /></td></tr>
 
        
<tr><td>年 薪:</td><td><input type="text" id="text5" /></td></tr>
 
    
</table>
 
</div>
 

<div id="btns" style="padding:8px;"></div>
  

<div id="myBlog" style="padding:8px;">
 
 
<iframe src="http://www.baidu.com" style="width:95%;height:500">
 
</iframe>
 
</div>
  

<div id="btns1" style="padding:8px;">
 
    
<table border="0" cellpadding="0" cellspacing="1" class="border5"  bgcolor="#BCDDF8">
 
        
<tr id="trEdit">
 
            
<td><input class="button" type="button" value="Edit" style="width:100px"></td>
 
        
</tr>
 
        
<tr id="trDel">
 
            
<td><input class="button" type="button" value="Delete" style="width:100px"></td>
 
        
</tr>
 
    
</table>
 
</div>
  
<div id="basicInfo1" style="padding:8px;">
       
<table>
      
    
<tr><td>公 司:</td><td><input type="text" id="text5" /></td></tr>
 
    
<tr><td>职 务:</td><td><input type="text" id="text5" /></td></tr>
 
    
<tr><td>年 薪:</td><td><input type="text" id="text5" /></td></tr>
 
</table>
 
</div>
 

<div id="basicInfo2" style="padding:8px;height:300">
         
<table>
 
    
<tr><td>姓 名:</td><td><input type="text" id="text1" /></td></tr>
 
    
<tr><td>性 别:</td><td><input type="text" id="text2" /></td></tr>
 
    
<tr><td>民 族:</td><td><input type="text" id="text3" /></td></tr>
 
    
<tr><td>学 历:</td><td><input type="text" id="text4" /></td></tr>
 
</table>
 
</div>
 

 
</BODY>
 
 
<script>
 
    
var tp = new TabPane("testTabDiv"
); 
    tp.addTabPage({title:
"Test New Func" ,width:100 ,panel:"basicInfo"
}); 
    tp.addTabPage({title:
"优快云 Blog Web JavaScript" ,width:100 ,panel:"btns"
});      
    tp.addTabPage({title:
"My Blog URL" ,width:100 ,panel:"myBlog"
}); 
         
    tp 
= new TabPane("btns"
); 
    tp.addTabPage({title:
"basicInfo1" ,width:150 ,panel:"basicInfo1"
}); 
    tp.addTabPage({title:
"basicInfo2" ,width:150 ,panel:"basicInfo2"
}); 
    tp.addTabPage({title:
"btns1" ,width:150 ,panel:"btns1"
}); 
    
</script>

 

  • 生成tab页JavaScript代码说明:

1)var tp = new TabPane("testTabDiv");

    创建一个tab页,参数为一个String:目标DIV的id。

2) tp.addTabPage({title:"Test New Func" ,width:100 ,panel:"basicInfo"});

    向tab页中添加内容。

    参数为一个Object:包括title、width、panel等属性。

        title:tab页显示的标题。

        width:设置标题的宽度。

        panel:tab页中所要显示的DIV.id。

3)二级tab页,只需要重复上面操作即可。例如

    tp = new TabPane("btns");

    tp.addTabPage({title:"basicInfo1" ,width:150 ,panel:"basicInfo1"});

    tp.addTabPage({title:"basicInfo2" ,width:150 ,panel:"basicInfo2"});

    tp.addTabPage({title:"btns1" ,width:150 ,panel:"btns1"});

4)DIV的默认style为:

 

div{  
  width
:    100%;
 
  height
:   auto;
 
}

 

也可以在DIV中特殊说明,例如:<div id="basicInfo2" style="padding:8px;height:300">        

 

 

测试代码

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 
<HEAD>
  
<TITLE>Css + Javascript = tabPan</TITLE>
  
<META NAME="Author" CONTENT="majianan">
  
<script type="text/javascript" src="tabPane.js"></script>
    
<link type="text/css" rel="stylesheet"  href="tabPane.css"  />
 
</HEAD>
<BODY>
    
<div id="testTabDiv" style="width:800px;"></div>
 
<div id="basicInfo" style="padding:8px;">         
    
<table>

        
<tr><td>姓 名:</td><td><input type="text" id="text1" /></td></tr>
        
<tr><td>性 别:</td><td><input type="text" id="text2" /></td></tr>
        
<tr><td>民 族:</td><td><input type="text" id="text3" /></td></tr>
        
<tr><td>学 历:</td><td><input type="text" id="text4" /></td></tr>             
        
<tr><td>公 司:</td><td><input type="text" id="text5" /></td></tr>

        
<tr><td>职 务:</td><td><input type="text" id="text5" /></td></tr>
        
<tr><td>年 薪:</td><td><input type="text" id="text5" /></td></tr>
    
</table>
</div>

<div id="btns" style="padding:8px;"></div>  

<div id="myBlog" style="padding:8px;">

 
<iframe src="http://www.baidu.com" style="width:95%;height:500">
</iframe>
</div>  

<div id="btns1" style="padding:8px;">

    
<table border="0" cellpadding="0" cellspacing="1" class="border5"  bgcolor="#BCDDF8">
        
<tr id="trEdit">
            
<td><input class="button" type="button" value="Edit" style="width:100px"></td>
        
</tr>
        
<tr id="trDel">
            
<td><input class="button" type="button" value="Delete" style="width:100px"></td>
        
</tr>
    
</table>
</div>  
<div id="basicInfo1" style="padding:8px;">
        
<table>
        
    
<tr><td>公 司:</td><td><input type="text" id="text5" /></td></tr>

    
<tr><td>职 务:</td><td><input type="text" id="text5" /></td></tr>
    
<tr><td>年 薪:</td><td><input type="text" id="text5" /></td></tr>
</table>
</div>

<div id="basicInfo2" style="padding:8px;height:300">         
<table>

    
<tr><td>姓 名:</td><td><input type="text" id="text1" /></td></tr>
    
<tr><td>性 别:</td><td><input type="text" id="text2" /></td></tr>
    
<tr><td>民 族:</td><td><input type="text" id="text3" /></td></tr>
    
<tr><td>学 历:</td><td><input type="text" id="text4" /></td></tr>
</table>
</div>

 
</BODY>
 
<script>
     
var tp = new TabPane("testTabDiv" );
     tp.addTabPage({title:
"Test New Func" ,width:100 ,panel:"basicInfo"
});
     tp.addTabPage({title:
"优快云 Blog Web JavaScript" ,width:100 ,panel:"btns"
});     
     tp.addTabPage({title:
"My Blog URL" ,width:100 ,panel:"myBlog"
});
          
     tp 
= new TabPane("btns"
);
     tp.addTabPage({title:
"basicInfo1" ,width:150 ,panel:"basicInfo1"
});
     tp.addTabPage({title:
"basicInfo2 优快云 Blog" ,width:100 ,panel:"basicInfo2"
});
     tp.addTabPage({title:
"btns1" ,width:150 ,panel:"btns1"
});
     
</script>

</HTML>

tabPane.css
div{
    width
:    100%;
    height
:    auto;
}
.tab 
{
    font-family
:    Verdana, Helvetica, Arial;
    font-size
:        12px;
    position
:    relative;
    width
:        100%;
}
.tab-border 
{border:1px solid;border-color:    rgb(120,172,255);}
.tab-head 
{
    background-color
:rgb(234,242,255); ;
    border
:0px;

    height
:23px;
    line-height
:20px;
    position
:relative;     
}

.tab-head ul
{
    border
:0px;
    height
:23px;
    list-style
:none;       
    margin
:0px;
      
    text-align
:center;

    padding
:0;
    position
:absolute;
    
}
.tab-head li
{     
    border
:    1px solid;

    border-color
:    rgb(120,172,255);
    border-left
:    0;
    border-bottom
:    0;
    border-top
:        0;
    cursor
:pointer;
    color
:#416AA3;     
    float
:left;

    display
:block;
    height
:22px;!important;height:20px;
    line-height
:20px;  
    padding
:        2px 6px 0px 6px;

    margin-top
:    2px;
    margin-right
:    -1px;
    text-overflow
:ellipsis;  
    white-space
:nowrap;
 
    overflow
:hidden;


}
.tab-head li.hover
{
    border
:            1px solid rgb(120,172,255);
    border-bottom
:    0;
    padding
:        0px 6px 3px 6px;
    margin
:            0px 1px 0px 0px;
    background
:        white;
    font-size
:            13px;
    font-weight
:    bold;
    color
:                rgb(0,66,174);
    overflow
:visible;     
}


tabPane.js
var TabPaneConfig =  {
    idPrefix: 
"tab-panel-object-"
,
    idCounter: 
0
,
    getId: 
function(){ return this.idPrefix+this.idCounter++
;},
    tabHeadId: 
"tabHead"
,
    tabHeadClass: 
"tab-head tab-border"
,
    tabBodyId: 
"tabBody"
,
    tabBodyClass: 
"tab-border"

}

function  TabPane(id){
    
this.id =
 id;
    
this.height = "100%"
;
    
this.width = "100%"
;
    
    
this.tabPages = 0
;
    
this.head = null
;
    
this.body = null
;    
}

TabPane.prototype.init 
= function
(){    
    
var r = document.getElementById(this
.id);
    
if(!r.style.overflow)    r.style.overflow = "auto"
;
    r.className 
= "tab"
;
    
    
//create head

    var div = document.createElement("div" );
    div.id 
=
 TabPaneConfig.tabHeadId;
    div.className 
=
 TabPaneConfig.tabHeadClass;
    
    r.appendChild(div);
    
this.head =
 div;
    
    
var ul = document.createElement("ul"
);
    div.appendChild(ul);
    
    
//create body

    div = document.createElement("div" );
    div.id 
=
 TabPaneConfig.tabBodyId;
    div.className 
=
 TabPaneConfig.tabBodyClass;
    
    r.appendChild(div);    
    
this.body =
 div;
}


TabPane.prototype.addTabPage 
= function
(obj){
    
if(!document.getElementById(obj.panel)) return
;
    
if(!this.tabPages)  this
.init();    
        
    
this.head.firstChild.appendChild(this
.createTabTitle(obj));
    
this
.body.appendChild(document.getElementById(obj.panel));    
    
this.tabPages++
;
}

TabPane.prototype.createTabTitle 
= function
(obj){
    
var li = document.createElement("li"
);
    li.id 
=
 TabPaneConfig.getId();    
    li.data 
=
 obj.panel;
    li.onclick
=
tabOnClick;
    li.style.width 
=
 obj.width;
    
    
if(this
.tabPages){
        li.className
=""
;
        document.getElementById(obj.panel).style.display
="none"
;    
    }
else
{
        li.className
="hover"
;
        document.getElementById(obj.panel).style.display
="block"
;    
    }
        
    
var textNode =
 document.createTextNode(obj.title);
    li.appendChild(textNode);
    
    
return
 li;
}

function
 tabOnClick(){    
  
var event = window.event || arguments[0
];
  
var element = event.srcElement ||
 event.target;  
    
var liArr = element.parentNode.getElementsByTagName("li"
);
    
for(var i=0; i<liArr.length; i++
){
        liArr[i].className
=""
;
        document.getElementById(liArr[i].data).style.display
="none"
;
    }
    element.className
="hover"
;    
    document.getElementById(element.data).style.display
="block"
;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值