模仿JQ的UI-TAB控件,兼容多浏览器

  • 作者:omeweb 来源:蓝色理想 文章点击数:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<link rel="stylesheet" href="ui.tabs.css" type="text/css" media="print, projection, screen">
    <title>Simple Tabs</title>
<style>
* { font-size:14px;}
h2{font-size:24px;}
.highlight {background-color:#FFFF00;}
.note{color:#FF0000; font-weight:bold;}
div .ui-tabs-panel{border:1px solid #97a5b0;}
</style>
</head>
<body>
<h2>Simple Tabs</h2>

<div id="container-1">
 <ul class="ui-tabs-nav">
  <li class="ui-tabs-selected"><a href="#fragment-1"><span>One</span></a></li>
  <li class=""><a href="#fragment-2"><span>Two</span></a></li>
  <li class=""><a href="#fragment-3"><span>Three</span></a></li>
 </ul>
 <div style="display: block; " class="ui-tabs-panel ui-tabs-hide" id="fragment-1">
  <p>First tab</p>
 </div>
 <div class="ui-tabs-panel ui-tabs-hide" id="fragment-2">
  <p>Second tab</p>
 </div>
 <div class="ui-tabs-panel ui-tabs-hide" id="fragment-3">
  <p>Third tab</p>
 </div>
</div>

<h2>使用说明</h2>

<div id="Div1">
 <ul class="ui-tabs-nav">
  <li class="ui-tabs-selected"><a href="#Div2"><span>高度封装</span></a></li>
  <li class=""><a href="#Div3"><span>使用简单</span></a></li>
  <li class=""><a href="#Div4"><span>兼容性好</span></a></li>
  <li class=""><a href="#Div5"><span>刷新保持</span></a></li>
  <li class=""><a href="#Div6"><span>程序控制</span></a></li>
  <li class=""><a href="#Div7"><span>结构简单</span></a></li>
 </ul>
 <div style="display: block;" class="ui-tabs-panel ui-tabs-hide" id="Div2">
  结构比较简单,已经封装,<span class="note">本作品为 橘子香水 原创,其中样式借用了jquery的ui-tab的样式,JS部分getElementsByClassName是来自网络,其他均为自己写的,程序还可以被扩展,也可能有bug,欢迎指正:QQ 61632273 ,MSN omeweb(at)hotmail.com。</span>
 </div>
 <div class="ui-tabs-panel ui-tabs-hide" id="Div3">
  使用简单,两行代码 :var s=new UI_TAB();s.init("container-1");//init方法的参数就是tab的外围DIV的ID,而且,一页可以多用
 </div>
 <div class="ui-tabs-panel ui-tabs-hide" id="Div4">
        兼容IE6,7,8(样式有一点问题),FF1.5,FF3.0
    </div>
 <div class="ui-tabs-panel ui-tabs-hide" id="Div5">
        刷新页面后仍然可以保持被激活的选项卡
    </div>
 <div class="ui-tabs-panel ui-tabs-hide" id="Div6">
        要用程序激活指定的tab,只需要:s2.activeIndex(1);//其中s2是实例名,后面的1是从0开始的序号,这里有一个例子:<a href="" onclick="s2.activeIndex(1); return false;">点这里激活第二个TAB的第二个</a>
    </div>
 <div class="ui-tabs-panel ui-tabs-hide" id="Div7"><pre style="margin:0; padding:0;">
&lt;div id=&quot;container-1&quot;&gt;<span class="note">&lt;!--使用时: var s=new UI_TAB();s.init("container-1");--&gt;</span>
 &lt;ul class=&quot;ui-tabs-nav&quot;&gt;
  &lt;li class=&quot;<span class="highlight">ui-tabs-selected</span>&quot;&gt;&lt;a href=&quot;<span class="highlight">#fragment-1</span>&quot;&gt;&lt;span&gt;<span class="highlight">One</span>&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li class=&quot;&quot;&gt;&lt;a href=&quot;#fragment-2&quot;&gt;&lt;span&gt;Two&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
  &lt;li class=&quot;&quot;&gt;&lt;a href=&quot;#fragment-3&quot;&gt;&lt;span&gt;Three&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
 <span class="note">&lt;!--上面的导航项目全放在class为的UL下面的LI下,高亮部分依次是默认显示的项目,显示内容的id,选项卡的标题--&gt;</span>
 &lt;div style=&quot;<span class="highlight">display: block;</span>&quot; class=&quot;<span class="highlight">ui-tabs-panel ui-tabs-hide</span>&quot; id=&quot;<span class="highlight">fragment-1</span>&quot;&gt;
  &lt;p&gt;First tab&lt;/p&gt;
 &lt;/div&gt;
 <span class="note">&lt;!--上面的结构就是内容的结构,高亮部分依次是默认显示的内容,每一个内容都要有的class,以及和选项卡对应的ID--&gt;</span>
 &lt;div class=&quot;ui-tabs-panel ui-tabs-hide&quot; id=&quot;fragment-2&quot;&gt;
  &lt;p&gt;Second tab&lt;/p&gt;
 &lt;/div&gt;
 &lt;div class=&quot;ui-tabs-panel ui-tabs-hide&quot; id=&quot;fragment-3&quot;&gt;
  &lt;p&gt;Third tab&lt;/p&gt;
 &lt;/div&gt;
&lt;/div&gt;
</pre>
    </div>
</div>

<script>

document.getElementsByClassName = function(className,oBox)
{
 //适用于获取某个HTML区块内部含有某一特定className的所有HTML元素
 this.d= oBox || document;
 var children = this.d.getElementsByTagName('*') || document.all;
 var elements = new Array();
 for (var ii = 0; ii < children.length; ii++) {
  var child = children[ii];
  if(child.className==className)
  {
      elements.push(child);
   continue;
  }
  var classNames = child.className.split(' ');
  for (var j = 0; j < classNames.length; j++)
  {
   if (classNames[j] == className)
   {
    elements.push(child);
    continue;
   }
  }
 }
 return elements;
}

document.getElementsByType = function(sTypeValue,oBox)
{
 //适用于获取某个HTML区块内部同属于某一特定type的所有HTML元素,如:input,script,link等等
 this.d= oBox || document;
 var children = this.d.getElementsByTagName('*') || document.all;
 var elements = new Array();
 for (var ii = 0; ii < children.length; ii++) {
  if (children[ii].type == sTypeValue) {
   elements.push(children[ii]);
  }
 }
 return elements;
}

function $F()
{
 var elements = new Array();
 for (var ii = 0; ii < arguments.length; ii++)
 {
  var element = arguments[ii];
  if (typeof element == 'string')
   element = document.getElementById(element);
  if (arguments.length == 1)
   return element;
  elements.push(element);
 }
 return elements;
}

$Cls = function (s,o){
 return document.getElementsByClassName(s,o);
};

$Type = function (s,o){
 return document.getElementsByType(s,o);
};

$Tag = function (s,o){
 this.d=o || document;
 return this.d.getElementsByTagName(s);
};

function UI_TAB()
{
 var id="";
 var arr=[];
 var panelList=[];
 this.init=function(id)
 {
  id=id;//alert(id);
  arr=$Tag("LI",
  $Cls("ui-tabs-nav",$F(id))[0]
  );
  
  panelList=$Cls("ui-tabs-panel ui-tabs-hide",$F(id));
  /******************注册tab的事件*/
  for(var i=0;i<arr.length;i++)
   arr[i].onclick=function(){
    activeLI(this);
   };
  /******************刷新后保持状态*/
  //alert(location.hash);
  var defaultID=location.hash.replace(/#/gi,"");//alert(defaultID);
  var defaultIndex=-1;
  if(defaultID!=null && defaultID!="")
  {
   for (var x=0; x< panelList.length;x++)
   {
    if(panelList[x].id==defaultID)
    {
     defaultIndex=x;
     break;
    }
   }
  }
  //alert(defaultIndex);
  
  if(defaultIndex!=-1)
  {active(defaultIndex);}
 }
 
 /******************激活*/
 function active(i)
 {
  activeLI(arr[i]);
 }
 
 function activeLI(LI)
 {
  //alert(LI.className);return;//没有使用LI.getAttribute("Class");问题是在IE7里得不到值
  if(LI.className=="ui-tabs-selected")
  {return;}
  else
  {
   var a=$Tag("a",LI)[0];//alert(a.href);
   var str=a.href;
   var temp_arr=str.split("#");
   var _id=temp_arr[temp_arr.length-1];//alert(_id);
   
   for ( var j=0 ;j<arr.length;j++ ) //用for in 无法修改classname,因为for in 是只读的
    arr[j].className="";
   
   LI.className="ui-tabs-selected";//设置当前的为激活状态
   
   //设置所有的ID隐藏
   //alert(id);//alert(panelList.length);
   for(j=0;j<panelList.length;j++)
    panelList[j].style.display="none";
   
   //设置当前的id为show
   $F(_id).style.display="block";
  }
 }
 
 this.activeIndex=function(i)
 {
  activeLI(arr[i]);
 }
 return this;
}

//初始化
var s=new UI_TAB();s.init("container-1");
//s.activeIndex(2);
var s2=new UI_TAB();
s2.init("Div1");

</script>
</body>
</html>

Tags:UI-TAB 浏览器 特效
  • 相关文章

Copyright 2006-2008 Powered by Noheart.NET无心人网络 All Rights Reserved.

QQ:89232083 E-Mail:leijian212@163.com

豫ICP备08004854号