有点乱,用到了自定义getByClass函数、sibling函数

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>仿QQ</title>
</head>
<style type="text/css">
body,ul,li,div,p{margin: 0;padding: 0;}
.qq_bg{
width: 200px;
background: #c66;
border:1px solid #66c;
position: fixed;
right: 20px;
top: 20px;
}
ul,li{list-style: none;}
.cf:before,.cf:after,.cf>li:before,.cf>li:after{
content: '';
display: block;
}
.cf:after,.cf>li:after{
clear: both;
}
.tab_nav>li{
float: left;
width: 48px;
border-left: 2px solid #fff;
height: 34px;
line-height: 34px;
text-align: center;
color: #fff;
font-size: 12px;
border-bottom: 2px solid #fff;
}
.tab_nav>li.on{border-bottom: none;height: 36px;}
.tab_nav>li:first-child{border-left: none;}
.txt div{
color: #fff;
background: pink;
text-align: center;
padding: 100px 0;
}
</style>
<body>
<div class="qq_bg">
<ul class="tab_nav cf">
<li class="on">会话</li>
<li>联系人</li>
<li>空间</li>
<li>微博</li>
</ul>
<div class="txt">
<div>
<p>泉眼无声惜细流,</p>
<p>树阴照水爱晴柔。</p>
<p>小荷才露尖尖角,</p>
<p>早有蜻蜓立上头。</p>
</div>
<div>
<p>红豆生南国,</p>
<p>春来发几枝。</p>
<p>愿君多采撷,</p>
<p>此物最相思。</p>
</div>
<div>
<p>少读诗书陋汉唐,莫年身世寄农桑。</p>
<p>骑驴两脚欲到地,爱酒一樽常在旁。</p>
<p>老去形容虽变改,醉来意气尚轩昂。</p>
<p>太行王屋何由动,堪笑愚公不自量。</p>
</div>
<div>
<p>万里桥西一草堂,百花潭水即沧浪。</p>
<p>风含翠篠娟娟净,雨裛红蕖冉冉香。</p>
<p>厚禄故人书断绝,恒饥稚子色凄凉。</p>
<p>欲填沟壑唯疏放,自笑狂夫老更狂。</p>
</div>
</div>
</div>
<script type="text/javascript">
var oWin=getByClass(document,'qq_bg')[0];
var oUl=getByClass(oWin,'tab_nav')[0];
var oDiv=getByClass(oWin,'txt')[0];
var aLi=oUl.getElementsByTagName('li');
var aDiv=oDiv.getElementsByTagName('div');
//console.log(aLi.length);
//console.log(aDiv.length);
for(var i=0;i<aDiv.length;i++){
aDiv[i].style.display='none';
}
aDiv[0].style.display="block"; for(var i=0;i<aLi.length;i++){
aLi[i].index=i;
aLi[i].onclick=function(){
this.className='on';
var aa=sibling(this);
for(var i=0;i<aa.length;i++){
aa[i].className=' ';
}
var index=this.index;
for(var j=0;j<aDiv.length;j++){
aDiv[j].style.display="none";
aDiv[index].style.display='block';
}
}
} function sibling( elem ) {
var r = [];
var n = elem.parentNode.firstChild;
for ( ; n; n = n.nextSibling ) {
if ( n.nodeType === 1 && n !== elem ) {
r.push( n );
}
}
return r;
} function getByClass(oParent,cls){
//console.log(oParent);
var aEle=oParent.getElementsByTagName('*');
var aResult=[];
for(var i=0;i<aEle.length;i++){
var aCls=aEle[i].className;
aCls=aCls.split(' ');
if(aCls.indexOf(cls)!=-1){
aResult.push(aEle[i]);
}
}
return aResult; }
</script>
</body>
</html>

js TAb的更多相关文章

  1. js Tab切换实例

    js 实现 tab 切换 实现如下效果: 1.图片每1秒钟切换1次. 2.当鼠标停留在整个页面上时,图片不进行轮播. 3.当点击切换页的选项上时,出现该选项的对应图片,而且切换页选项的背景颜色发生相应 ...

  2. JS——tab函数封装

    1.为li标签添加index属性,这个属性正好就是span标签数组的index值 2.函数封装适合页面有多个tab切换,需要注意的在获取的li标签和span标签对象时,必须将对应div对象作为参数传入 ...

  3. js tab栏切换

    <!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" ...

  4. 原生js tab 栏切换

    <div id="box"> <div> <button>按钮1</button> <button>按钮2</bu ...

  5. JS tab切换事件

    $('ul.main-tab>li').on('mousedown', data, function() { var $this = $(this), $box = $('.main-tab-c ...

  6. JS——tab切换

    排它思想: 1.先让所有的元素恢复默认值 2.再让选中的元素赋专有的值 3.干掉所有人,剩下我一个 <!DOCTYPE html> <html> <head lang=& ...

  7. avalon结合原生js tab切换

    <div class="fishqc-tap"> <div ms-class="[@codePic!=''&&@codeInfo!='' ...

  8. JS特效之Tab标签切换

    在我们平时浏览网站的时候,经常看到的特效有图片轮播.导航子菜单的隐藏.tab标签的切换等等.这段时间学习了JS后,开始要写出一些简单的特效.今天我也分享一个简单tab标签切换的例子.先附上代码: HT ...

  9. 基于CkEditor实现.net在线开发之路(4)快速布局,工具箱,模板载入,tab选项卡简单说明与使用

    上一章给常用的from表单控件属性页面,进行了简单说明和介绍,但是由于是在网页中做界面设计,操作肯定没有桌面应用程序方便,便捷,为了更方便的布局与设计,今天我主要说一下快速布局,工具箱,tab选项卡, ...

随机推荐

  1. layoutSubviews,setNeedsDisplay

    一 , layoutSubviews何时调用的问题 //layoutSubviews何时调用的问题,这个方法是当你需要在调整subview的大小的时候需要重写(我这个翻译不严谨,以下是原文:You s ...

  2. 无法为表空间 XX 中的段创建 INITIAL 区

    select * from dba_data_files where TABLESPACE_NAME='XX'--找到表空间文件 alter database datafile '/opt/app/o ...

  3. outlook经常无故崩溃解决办法

    问题描述: Outlook 最近有点怪,有时无法启动有时又突然崩溃.原以为是远程访问服务出了问题,但即使在本地操作,Outlook 仍然极不稳定.怎么回事? 原因:这种现象,很可能是由 Office ...

  4. MTK+Android编译

    1. 修改recovery代码 比如mediatek\custom\itek82_wet_kk\recovery\inc\cust_keys.h ./mk r k ./mk recoveryimage ...

  5. 2012 #1 Saving Princess claire_

    Saving Princess claire_ Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & % ...

  6. UE4编程之C++创建一个FPS工程(一)创建模式&角色&处理输入

    转自:http://blog.csdn.net/u011707076/article/details/44180951 从今天开始,我们一起来学习一下,如何使用C++将一个不带有任何初学者内容的空模板 ...

  7. mysql 实现行号的方法——如何获取当前记录所在行号

    SELECT aaa,(@rowNum:=@rowNum+1) AS rowNoFROM tb_bbb,(SELECT (@rowNum :=0) ) bORDER BY tb_bbb.liushui ...

  8. C#:常规属性和自动实现的属性

    根据属性的实现方式,属性可分为自动实现的属性和常规属性. 常规属性需要具体的人为的实现get访问器或者set访问器,而且一般需要有一个字段与之相对应:而自动实现的属性的get和set访问器的实现部分被 ...

  9. 指令随笔之:tail、cat、scp、&、&&、;、|、>、>>

    tail(中文意思是跟踪)   tail默认只看文件的最后10行内容,cat则一次显示全部内容 ping 192.168.120.204 > zyx.log &    #  &表 ...

  10. clang: error: linker command failed with exit code 1 (use -v to see invocation)

    报错提示: ... ld: 6 duplicate symbols for architecture x86_64 clang: error: linker command failed with e ...