我有一个列表(空间只是为了清晰起见):
<li class="a"> A </li>
<li class="b"> B </li>
<li class="c"> C </li>
<li class="a b"> A B </li>
<li class="a c"> A C </li>
<li class="b c"> B C </li>
<li class="a b c"> A B C </li>
我有一系列&#39;
:<a class="show-a" href="#">A</a>
<a class="show-b" href="#">B</a>
<a class="show-c" href="#">C</a>
<a class="show-all active" href="#">ALL</a>
我有一些CSS:
li {color: red; }
.deactivate {color: #ddd; }
a {color: #ddd; }
.active {color: blue; }
我想做两件事:
点击相应的<a>
控件后,将.deactivate
类添加/删除到相应的<li>
。例如如果点击了.show-a
,请将.deactivate
应用于没有.a
类的所有元素。因此,请从不再需要它的任何.deactivate
中删除<li>
类。
反映控件中的当前选择。即,将.active
类添加/移除到相应的锚链接。 (这是我永远找不到答案的部分)。
注意:
.active
。像单选按钮一样,但通过CSS更具风格。RE其他答案:有很多(例如http://jsfiddle.net/Cx4uK/2/)但
答案 0 :(得分:1)
此解决方案使用data-selector
属性来保存与特定链接相关的项目的选择器。它有助于使JS真正干净。
对于有效链接,我们只需从所有链接中删除.active
,然后将其添加到刚刚点击的链接中。
<强> JS 强>
$(document).ready(function () {
$('.links a').click(function () {
// Remove .active from all links then add to the clicked one
$('.links a').removeClass('active');
$(this).addClass('active');
// Remove .active from all lis then use the attribute data-selector to set
// the relevant items
$('.letters li').removeClass('active');
$(this.getAttribute('data-selector')).addClass('active');
});
});
<强> HTML 强>
<div class="links">
<a class="show-a" href="#" data-selector=".a">A</a>
<a class="show-b" href="#" data-selector=".b">B</a>
<a class="show-c" href="#" data-selector=".c">C</a>
<a class="show-all active" href="#" data-selector=".a,.b,.c">ALL</a>
</div>
<ul class="letters">
<li class="a"> A </li>
<li class="b"> B </li>
<li class="c"> C </li>
<li class="a b"> A B </li>
<li class="a c"> A C </li>
<li class="b c"> B C </li>
<li class="a b c"> A B C </li>
</ul>
<强> CSS 强>
.active {
background-color:#AAA;
}
答案 1 :(得分:0)
我认为你想要这样的东西:
$(function () {
$("#user-controls div").first().addClass('active'); // <---add this line
$("#user-controls").on('click', 'div', function () {
$(this).addClass('active').siblings().removeClass('active'); //<--and this
var classToShow = this.id.split('-')[1],
filter = classToShow === "all" ? 'div' : '.' + classToShow;
$("#devices").children().show().not(filter).hide();
});
});
在这里我创建了一个css类.active{}
:
.active {
background:red !important;
color:yellow;
}
在页面加载后#user-controls
all
中的第一个div应该应用.active
css类。
这一个:
$("#user-controls div").first().addClass('active');
然后,如果点击发生在其他链接上,那么在这种情况下.siblings()
是有用的功能。
$(this).addClass('active').siblings().removeClass('active');
让我们分手:
$(this).addClass('active')
此行将类.active
添加到点击的链接和
.siblings().removeClass('active');
这个删除了在同一级别的其他链接上应用的其他链接类。