Tab标签js切换高效率写法

干咱们java web开发这一行的,一般可能都碰到过做Tab标签切换的js功能任务,我看到很多人都喜欢用循环去控制那个置为当前显示,剩下都置为隐藏,我就很奇怪,为什么一定要使用循环去做这件事呢,如果你有1000个标签,也用循环逐个搞定么?


原来的传统写法:

function tabit(id,cid) {
  for(var i=0; i<10; i++){
     gi(["tab"+i]).className = "taboff";
     gi(["ctab"+i]).style.display = "none";
  }
  gi(id).className="tabon";
  gi(cid).style.display="block";
}

原理:用for循环将全部的tab置为不显示,然后循环结束后,把指定的那个tab置前即可。

这样做效率极低,虽然感觉不出来慢,不过如果我是计算机,我肯定会骂这个编程的,让老子白白浪费时间体力干这么一件重复无意义的事情;另外受tab个数限制。


我初次接触这种切换问题的时候,就提出一种临时存储记忆法,可以比这种传统循环的算法效率高很多,实现起来也非常简单:

var lastTab; //临时存储上次时的tab ID值

function tabit(cid) {

//如果上次有存储值,且和本次请求切换的是同一个,那么直接提前结束

if( lastTab && lastTab == cid)
          return;

//否则,改变上次的tab状态为隐藏状态,并且置换本次请求的tab为当前状态

/*这里要注意考虑第一次触发这个函数的情况,因为这个时候lastTab是undefined,所以直接查找id对应的元素肯定会报js错误的*/
if( lastTab) {
    gi(lastTab).className = "taboff";

    gi(lastTab).style.display="none";
}

gi(cid).className="tabon";
gi(cid).style.display="block";

//最后将本次的tab记录下来以备下次切换使用

lastTab = cid;
}

//根据id获取对应的元素对象

function gi(id) {

        return document.getElementById(id);

}


我的这个版本的算法原理是:用一个变量临时存储最后一次请求切换的Tab id,这个时候,如果有下一次的切换请求,那么就跟上次请求的记录进行对比,如果相同,则不进行切换,直接结束,否则进行切换本次的tab状态和上次的tab状态即可。

这样一来没有做重复无意义的工作,二来效率高,且不受tab个数的限制,就算有10000个tab进行切换,处理的速度还是跟处理2个tab切换的速度一样的高。


如果哪位看官有更高效的算法尽管贴出来,好让大家参考学习下,大家共同进步才是真的进步!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值