本文分享了一个基于jQuery的轻量级Tab选项卡插件实现。通过采用dl/dt/dd语义化结构替代传统的div/ul/li,提升了代码隔离性与标准符合度。插件支持click与mouseover两种切换模式,代码简洁且包含详细注释,适合前端开发者参考学习。
jQuery Tab选项卡插件实现概述
本文通过一个具体的实例,演示了如何使用jQuery实现Tab选项卡的切换功能。内容涵盖了从构思到代码实现的完整过程,旨在为读者提供一份可供参考的学习资料。
HTML结构设计与优化
在开发初期,HTML结构的搭建采用了如下形式:
<div class="tabs">
<ul>
<li class="acss" data-box="#panel-1">标签1</li>
<li class="bcss" data-box="#panel-2">标签2</li>
<li class="bcss" data-box="#panel-3">标签3</li>
</ul>
<div id="panel-1">内容111111</div>
<div id="panel-2" style="display:none;">内容222222</div>
<div id="panel-3" style="display:none;">内容333333</div>
</div>
随后,对结构进行了调整,改为使用以下代码:
<dl class="tabs">
<dt>
<a class="acss" href="#panel-1">标签1</a>
<a class="bcss" href="#panel-2">标签2</a>
<a class="bcss" href="#panel-3">标签3</a>
</dt>
<dd id="panel-1">内容1</dd>
<dd id="panel-2" style="display:none;">内容2</dd>
<dd id="panel-3" style="display:none;">内容3</dd>
</dl>
插件核心代码解析
之所以进行这种结构调整,主要基于两点考虑:一是dl、dt、dd标签在页面布局中的应用频率低于div、ul、li,使用它们能更好地实现样式与逻辑的隔离;二是通过JS操作dl/dt/dd对象,可以最大程度减少对页面其他元素的干扰。此外,这种结构无需在li标签中自定义data-box属性,更符合网页书写规范,且整体结构感更为清晰。以下是该插件的具体实现代码:
(function ($) {
$.fn.Tabs = function (options) {
//默认参数设置
var settings = {
beforeCss: "bcss", //激活前样式名
afterCss: "acss", //激活后样式名
model: "mouseover" //切换方式("mouseover"或者"click")
};
//不为空,则合并参数
if (options)
$.extend(settings, options);
//获取a标签集合
var arr_a = $("> dt > a", this);
//给a标签分别绑定事件
arr_a.each(function () {
$(this).bind(settings.model, function (event) {
//去除a标签的锚点跳转
event.preventDefault();
//样式控制
$(this).removeClass().addClass(settings.afterCss)
.siblings("a").removeClass().addClass(settings.beforeCss);
//隐藏与显示控制
var dd_id = $(this).attr("href");
$(dd_id).show().siblings("dd").hide();
});
});
//遵循链式原则
return this.each(function () { });
};
})(jQuery);
之所以称其为轻量级插件,是因为其代码量极少且逻辑简单。加上详细注释后,读者应该能够轻松理解其工作原理。
切换模式配置说明
在配置对象settings中,model参数用于定义切换行为模式:
- 当该参数设置为"click"时,用户点击标签即可触发切换;
- 当该参数设置为"mouseover"时,鼠标滑过标签即可触发切换。
DEMO示例与效果展示
在开发初期,曾尝试使用hover方法来实现鼠标滑入切换的效果,但发现hover并不支持bind绑定。这是因为hover是jQuery封装mouseover事件后的产物,并非原生事件,因此无法直接绑定。下面提供一个具体的DEMO示例:
<!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>
<title></title>
<style type="text/css">
*
{
margin: 0;
padding: 0;
}
.tabs
{
width: 504px;
margin: 50px auto;
}
.acss,.bcss
{
text-decoration:none;
line-height: 35px;
font-size: 14px;
padding:8px 15px;
}
.bcss
{
background-color: #D4D4D4;
border-bottom:1px solid white;
}
.acss
{
background-color: orange;
border-bottom:1px solid orange;
}
.tabs dd
{
width: 500px;
height: 300px;
border: 1px solid orange;
text-align: center;
line-height: 300px;
}
</style>
</head>
<body>
<dl class="tabs" id="tabs1">
<dt>
<a class="acss" href="#panel-1">标签1</a>
<a class="bcss" href="#panel-2">标签2</a>
<a class="bcss" href="#panel-3">标签3</a>
</dt>
<dd id="panel-1"><h1>鼠标滑入切换</h1></dd>
<dd id="panel-2" style="display:none;">内容2</dd>
<dd id="panel-3" style="display:none;">内容3</dd>
</dl>
<dl class="tabs" id="tabs2">
<dt>
<a class="acss" href="#panel-4">标签1</a><!--默认第一个激活-->
<a class="bcss" href="#panel-5">标签2</a>
<a class="bcss" href="#panel-6">标签3</a>
</dt>
<dd id="panel-4"><h1>鼠标点击切换</h1></dd><!--默认第一个显示-->
<dd id="panel-5" style="display:none;">内容2</dd>
<dd id="panel-6" style="display:none;">内容3</dd>
</dl>
<script src="../js/jquery-1.4.1.min.js" type="text/javascript"></script>
<script src="../js/jquery.similar.Tabs.js" type="text/javascript"></script>
<script type="text/javascript">
$("#tabs1").Tabs(); //默认鼠标滑入切换
$("#tabs2").Tabs({model:"click"}); //设置为点击切换
</script>
</body>
</html>
最终的运行效果如下图所示:

希望本文的内容能对正在学习jQuery程序设计的朋友有所帮助。