选项卡普通写法
HTML
<div class="box">
<ul id="ul_title">
<li class="active">标题1</li>
<li>标题2</li>
<li>标题3</li>
<li>标题4</li>
</ul>
<div id="ul_container">
<div class="active">内容1</div>
<div>内容2</div>
<div>5043</div>
<div>53474</div>
</div>
</div>
CSS
*{
margin:0;
padding:0;
}
#ul_title{
}
#ul_title li{
float:left;
width:100px;
height:50px;
font-size:16px;
line-height:50px;
list-style:none;
text-align:center;
background-color:#eee;
cursor:pointer;
}
#ul_title li.active{
font-weight:bold;
background-color:#ccc;
}
#ul_container{
width:400px;
height:300px;
}
#ul_container div{
display:none;
width:100%;
height:100%;
border:1px solid #ccc;
}
#ul_container div.show{
display:block;
}
JavaScript
/**
初始化(即默认选中哪个)放在了 JS 中处理,可以降低 HTML 和 JS 的耦合性,如果需求变动,只需要改动 curIndex 即可。
**/
window.onload = function(){
var titleContainer = document.getElementById("ul_title"),
container = document.getElementById("ul_container"),
titles = titleContainer.children,
contents = container.children,
titleActive = "active",
contentActive = "show",
curIndex = 0; // 当前选中标签页的下标
// 初始化
common.addClass(titles[curIndex], titleActive);
common.addClass(contents[curIndex], contentActive);
// 添加事件
for (var i=0;i<titles.length ;i++) {
(function(index){
titles[index].onclick = function(){
// 移除之前的样式
for (var i=0;i<titles.length ;i++ ) {
common.removeClass(titles[i], titleActive);
common.removeClass(contents[i], contentActive);
}
// 添加当前样式
common.addClass(this, titleActive);
common.addClass(contents[index], contentActive);
};
})(i);
}
};
// 公共方法
var common = {
// 添加class
addClass: function(obj, className){
if(obj.classList){
this.addClass = function(obj, className){
obj.classList.add(className);
};
} else {
this.addClass = function(obj, className){
var originalClass = obj.className;
var re = new Regexp("\\b" + className + "\\b", "g");
var result = className;
if(re.test(originalClass)) {
return;
}
if(originalClass != ""){
result += " " + className;
}
obj.className = this.combAndTrim(result.replace(re, ''));
};
}
...