用js写简单选项卡

用js写简单选项卡如图,最简单的纯粹的选项卡第一步,当然是先写html代码和css样式<!DOCTYPEhtml><html><head><metacharset=&quo

大家好,又见面了,我是你们的朋友全栈君。

如图,最简单的纯粹的选项卡

<span role="heading" aria-level="2">用js写简单选项卡

第一步,当然是先写html代码和css样式

<!DOCTYPE html>
<html>
<head>
<meta charset="gb2312" />
<title>无标题文档</title>
<style>
body,ul,li
{margin:0; padding:0; font:12px/1.5 arial;}
ul,li
{list-style:none;}
.wrap
{width:500px; margin:20px auto;}
.hide
{display:none;}
#tab_t
{height:25px;border-bottom:1px solid #ccc;}
#tab_t li
{float:left; width:80px; height:24px; line-height:24px; margin:0 4px; text-align:center; border:1px solid #ccc; border-bottom:none; background:#f5f5f5; cursor:pointer}
#tab_t .act
{ position:relative; height:25px; margin-bottom:-1px; background:#fff;}
#tab_c
{border:1px solid #ccc; border-top:none; padding:20px;}
</style>
</head>

<body>

<div class="wrap">
<ul id="tab_t">
<li class="act">选择1</li>
<li>选择2</li>
<li>选择3</li>
<li>选择4</li>
</ul>
<div id="tab_c">
<div>内容1</div>
<div class="hide">内容2</div>
<div class="hide">内容3</div>
<div class="hide">内容4</div>
</div>
</div>

</body>
</html>

第二步,实现简单的切换效果

要点1:abc.document.getElementsByTagName(“li”):取得abc下面的所有标签为li的元素,返回的是一个元素集合,有数组的一些属性。

要点2:循环,先循环给li加上onclick事件,再onlink事件点击的时候,再循环让所有选项卡的act样式去掉,所有的内容隐藏。然后让所点击的选项及对应内容显示。

要点3:tab_t_li[i].index = i; 在循环时,给选项卡加一个额外的属性并赋值,以做选项卡和内容的对应。


<!DOCTYPE html>
<html>
<head>
<meta charset="gb2312" />
<title>无标题文档</title>
<style>
body,ul,li
{margin:0; padding:0; font:12px/1.5 arial;}
ul,li
{list-style:none;}
.wrap
{width:500px; margin:20px auto;}
.hide
{display:none;}
#tab_t
{height:25px;border-bottom:1px solid #ccc;}
#tab_t li
{float:left; width:80px; height:24px; line-height:24px; margin:0 4px; text-align:center; border:1px solid #ccc; border-bottom:none; background:#f5f5f5; cursor:pointer}
#tab_t .act
{ position:relative; height:25px; margin-bottom:-1px; background:#fff;}
#tab_c
{border:1px solid #ccc; border-top:none; padding:20px;}
</style>
<script>
window.onload
= function(){
var tab_t = document.getElementById("tab_t");
var tab_t_li = tab_t.getElementsByTagName("li");
var tab_c = document.getElementById("tab_c");
var tab_c_li = tab_c.getElementsByTagName("div");
var len = tab_t_li.length;
var i=0;

for(i=0; i<len; i++){
tab_t_li[i].index
= i;
tab_t_li[i].onclick
= function(){
for(i=0; i<len; i++){
tab_t_li[i].className
= '';
tab_c_li[i].className
= 'hide';
}
tab_t_li[
this.index].className = 'act';
tab_c_li[
this.index].className = '';
}
}

}
</script>
</head>

<body>

<div class="wrap">
<ul id="tab_t">
<li class="act">选择1</li>
<li>选择2</li>
<li>选择3</li>
<li>选择4</li>
</ul>
<div id="tab_c">
<div>内容1</div>
<div class="hide">内容2</div>
<div class="hide">内容3</div>
<div class="hide">内容4</div>
</div>
</div>

</body>
</html>

第三步,写成函数。上面的写法只能一个页面用一个选项卡,如果再加一个的话,就需要复制一份,再改很多变量名。

要点:tab_t_li[i][evt] 因为传值的时候是字符串,如果直接写的话就是tab_t_li[i].”onclick”这样话是执行不了的,tab_t_li[“onclick”]这样执行没问题。

好了,现在一个页面上就可以有多个切换了,只需要调用函数的时候,写上相应的id名和标签名,事件名称就可以了

<!DOCTYPE html>
<html>
<head>
<meta charset="gb2312" />
<title>无标题文档</title>
<style>
body,ul,li
{margin:0; padding:0; font:12px/1.5 arial;}
ul,li
{list-style:none;}
.wrap
{width:500px; margin:20px auto;}
.hide
{display:none;}
#tab_t
{height:25px;border-bottom:1px solid #ccc;}
#tab_t li
{float:left; width:80px; height:24px; line-height:24px; margin:0 4px; text-align:center; border:1px solid #ccc; border-bottom:none; background:#f5f5f5; cursor:pointer}
#tab_t .act
{ position:relative; height:25px; margin-bottom:-1px; background:#fff;}
#tab_c
{border:1px solid #ccc; border-top:none; padding:20px;}
</style>
<script>
window.onload
= function(){

tab(
"tab_t","li","tab_c","div","onmouseover")
function tab(tab_t,tab_t_tag,tab_c,tag_c_tag,evt){
var tab_t = document.getElementById(tab_t);
var tab_t_li = tab_t.getElementsByTagName(tab_t_tag);
var tab_c = document.getElementById(tab_c);
var tab_c_li = tab_c.getElementsByTagName(tag_c_tag);
var len = tab_t_li.length;
var i=0;
for(i=0; i<len; i++){
tab_t_li[i].index
= i;
tab_t_li[i][evt]
= function(){
for(i=0; i<len; i++){
tab_t_li[i].className
= '';
tab_c_li[i].className
= 'hide';
}
tab_t_li[
this.index].className = 'act';
tab_c_li[
this.index].className = '';
}
}
}

}
</script>
</head>

<body>

<div class="wrap">
<ul id="tab_t">
<li class="act">选择1</li>
<li>选择2</li>
<li>选择3</li>
<li>选择4</li>
</ul>
<div id="tab_c">
<div>内容1</div>
<div class="hide">内容2</div>
<div class="hide">内容3</div>
<div class="hide">内容4</div>
</div>
</div>

</body>
</html>

ps:加自动切换的效果,可以看下一篇 用js写简单选项卡 加 自动切换效果

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155183.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月2日 下午5:36
下一篇 2022年7月2日 下午5:36


相关推荐

  • C语言const的用法

    C语言const的用法1 const 的用法 const 是 constant 的缩写 意思是 恒定不变的 它是定义只读变量的关键字 用 const 定义只读变量的方法很简单 就在定义变量时前面加 const 即可 如 constdoublep 3 用 const 定义的变量的值是不允许改变的 不允许给它重新赋值 即使是赋相同的值也不可以 所以说它定义的是只读变量 这也就意味着必须在定义的时候就给它赋

    2026年3月19日
    2
  • 两种引用外部CSS文件的方法

    两种引用外部CSS文件的方法一 用 link 标签引入 linkrel stylesheet href a css 二 在 css 里面引用另一个文件 style importurl a css style 三 二者之间的差别 1 Link 采用 HTML 标签将 CSS 关联 而 import 可以在一个 CSS 文件中引入其它的 CSS 文件 2 兼容性的差别 IE6 以下不支持 import3 加

    2026年3月19日
    3
  • python中map()函数的用法讲解

    python中map()函数的用法讲解map 函数的原型是 map function iterable 它返回结果是一个列表 参数 function 传的是一个函数名 可以是 python 内置的 也可以是自定义的 参数 iterable 传的是一个可以迭代的对象 例如列表 元组 字符串这样的 这个函数的意思就是将 function 应用于 iterable 的每一个元素 结果以列表的形式返回 注意到没有 iterable 后面还有省略号 意思就是

    2026年3月18日
    2
  • vs2008sp1下载_vs2008激活成功教程版

    vs2008sp1下载_vs2008激活成功教程版安装VS2005SP1安装补丁包补充说明症状当您尝试运行MicrosoftWindowsServer2003或MicrosoftWindowsXP,计算机上安装大MicrosoftWindowsInstaller.msi)程序包或大型MicrosoftWindowsInstaller修补程序(.msp)程序包您可能会收到以下错误信息:错误1718。FileNa

    2022年10月5日
    6
  • macbook双系统文件共享_华为双系统短信共享吗

    macbook双系统文件共享_华为双系统短信共享吗MacBook安装双系统多分区共享访问解决方案1.   需求在MacBook中安装Win7,mac双系统。磁盘分区为4个(A,B,C,D),其中A(300G),B(400G)存放个人和系统无关的东西并实现两个系统都能访问A、B;C(150G)安装Win764位系统;D(150G)安装MacOS系统。双系统之间互不影响,也就是说如果Win7

    2022年10月5日
    4
  • ly_baiduwx 百度文心一言AI原创文章插件 – Z-Blog SEO生成工具

    ly_baiduwx 百度文心一言AI原创文章插件 – Z-Blog SEO生成工具

    2026年3月12日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号