该 Javascript 选项卡类并没有提供漂亮的界面,它只是提供了对指定的多个容器元素进行切换的功能。实际使用时通过指定CSS来定义显示样式。
该类并不创建包含元素的页容器,而是添加指定的容器,添加后,该类将接管此容器元素的显示。比如,页面上有两个DIV,里面分别包含不同的元素。默认情况下这两个DIV将上下排列显示在页面上。现在想让这两个DIV组成选项卡,就可以将这两个DIV添加到该类中,添加后这两个DIV只有一个显示,通过点击该类生成的相应的切换按钮进行控制。
该类有两个方法:
add(text,elementid,ico)
将指定的元素添加到选项卡控制中。
text : 选项卡的标题;
elementid :添加到选项卡中的元素的ID。
ico : 可以为该选项卡添加一个图标。
render(elementid)
生成到指定的元素内。
elementid :生成到的元素ID。
此方法将生成一个DIV,包含一个UL元素,UL元素中包含相应数量的LI元素,每个LI元素中包含一个A元素,即选项卡的切换控制按钮,分别控制由 add 方法添加的每一个容器元素。
此方法生成的元素结构如下:
< ul >
< li >< a class="active" > tabText </ a ></ li >
< li >< a > tabText </ a ></ li >
...
</ ul >
</ div >
被激活的选项卡其控制按钮元素的CSS类为:active
需要自定义的样式:
.tabs ul {}
.tabs ul li {}
.tabs ul li a, .tabs ul li a:link, .tabs ul li a:visited, .tabs ul li a:active, .tabs ul li a:hover {}
.tabs ul li a.active, .tabs ul li a.active:link, .tabs ul li a.active:visited, .tabs ul li a.active:active, .tabs ul li a.active:hover {}
该类的 ID 包含随机数,这是为了防止页面中有多个此类的对象时发生冲突。
可以将同一个容器元素添加多次,也可以将同一个容器元素添加到多个此类的对象中,这样控制起来就有意思了。大家可以试试。
使用方法:
将下面的代码保存为js文件,在使用的页面用 <script type="text/javascript" src="......"></script> 导入,然后添加几句代码即可。
选项卡类
类名称:tabs
使用:
var t = new tabs;
t.add('选项卡标题','被控制的元素ID');
...
t.render('要输出到的元素ID');
*/
function tabs(){
this .id = ' tabs ' + Math.ceil(Math.random() * 10000 );
this .lnkItems = new Array(); // 所包含的选项页数组列表
}
// 添加方法。参数:text:选项页的标题;elementid:选项页所控制的元素ID
tabs.prototype.add = function (text,elementid,ico){
var element = document.getElementById(elementid);
if (element != null )
{
var lnk = document.createElement( ' a ' );
lnk.id = ' tab_ ' + this .id + ' _ ' + Math.ceil(Math.random() * 10000 ); // ID,生成随机数,确保不重复
lnk.innerHTML = ico != null ? ' <img src=" ' + ico + ' " /> ' : '' ;
lnk.innerHTML += text;
lnk.href = ' # ' ;
lnk.masterdivid = this .id;
lnk.delementid = elementid;
element.style.display = ' none ' ;
if ( this .lnkItems.length == 0 )
{
lnk.className = ' active ' ;
element.style.display = '' ;
}
this .lnkItems[ this .lnkItems.length] = lnk;
}
}
// 输出到指定的元素中
tabs.prototype.render = function (elementid){
var pelement = document.getElementById(elementid);
if (pelement != null ){
var d = document.createElement( ' div ' );
d.id = this .id;
d.className = ' tabs ' ;
pelement.appendChild(d);
var ul = document.createElement( ' ul ' );
d.appendChild(ul);
var cleardiv = document.createElement( ' div ' );
cleardiv.className = ' clear ' ;
d.appendChild(cleardiv);
for ( var i = 0 ;i < this .lnkItems.length;i ++ )
{
this .lnkItems[i].onclick = function ()
{
var master = document.getElementById( this .masterdivid);
var lnks = master.all.tags( ' a ' );
for ( var j = 0 ;j < lnks.length;j ++ )
{
lnks[j].className = '' ;
document.getElementById(lnks[j].delementid).style.display = ' none ' ;
}
this .className = ' active ' ;
document.getElementById( this .delementid).style.display = '' ;
}
var li = document.createElement( ' li ' );
li.appendChild( this .lnkItems[i]);
ul.appendChild(li);
}
}
}