在网站构建中,每个标签都有一个类别,包括tab1,tab2,tab3等等。
我想要做的是首先检查一个标签是否有一个“cur”类,如果是,检查其余的li以查看它是否有另一个类“tab1”,“tab2” ,“tab3”,“tab4”或“tab5”然后将“tab”类添加到body标签
得到这样的东西
<body class="tab2">
<div class="nav">
<ul>
<li class="current1 tab1">First Tab</li>
<li class="current1 cur sub tab2">Second Tab</li>
<li class="current1 sub tab3">Third Tab</li>
<li class="current1 sub tab4">Fouth Tab</li>
<li class="current1 sub tab5">Fifth Tab</li>
</ul></div>
我尝试过类似下面的jQuery,但它总是在身体上添加一个额外的tab5类
if ( $('.navigation ul li.tab1').hasClass('cur') ) {
$('body').addClass('tab1');
} else if ( $('.navigation ul li.tab2').hasClass('cur') ) {
$('body').addClass('tab2');
} else if ( $('.navigation ul li.tab3').hasClass('cur') ) {
$('body').addClass('tab3');
} else if ( $('.navigation ul li.tab4').hasClass('cur') ) {
$('body').addClass('tab4');
} else ( $('.navigation ul li.tab5').hasClass('cur') ); {
$('body').addClass('tab5');
}
我知道有一种更清洁的方式,但似乎无法解决这个问题
我希望我可以手动添加该类,但我无法访问HTML,因此必须使用javaScript生成它
任何有用的帮助
谢谢
答案 0 :(得分:1)
仅遵循您提供的基础知识(不确定您是否使用jQueryUI之类的标签库),您可以非常轻松地简化您正在进行的操作而不需要所有ifs。
见下文:
var patt = new RegExp(/tab[0-9]/),
tabClass = "" + $(".cur").attr("class").match(patt);
$('body').removeClass("tab1 tab2 tab3 tab4 tab5")
.addClass("" + tabClass); // the "" + is required
作为一条线:
$('body').removeClass("tab1 tab2 tab3 tab4 tab5").addClass("" + $(".cur").attr("class").match(/tab[0-9]/));
1线的细分
body
元素cur
cur
的元素的所有类
tab
开头并以0到9整数结束的类名,当然还有结束{{1} } {} .addClass()对元素)
答案 1 :(得分:0)
如果您使用:
$('.navigation ul li.cur');
您将获得与选择器匹配的所有元素的数组。然后,您可以使用元素ids ala:
var elems=$('.navigation ul li.cur');
$('body').removeClass()
elems.each(function(){
$('body').addClass($(this).attr('id'))
})
答案 2 :(得分:0)
$('.nav li').click(function(){
$('.nav li').removeClass('active');
// set the attribute of tab that was clicked as active
$(this).attr('class', 'active');
});
在这里找到jsfiddle:http://jsfiddle.net/P5Kzr/