jquery列表项类切换
jquery list item class toggle
我有一个简单的函数可以将列表项类从"活动"切换到"非活动"。将所有其他列表项设置为"非活动"以便只能有一个"活动"列表项的最有效方法是什么(即使用最少的代码)?请参阅下面的示例。谢谢
<ul class="menu">
<li id="one" class="active">One</li>
<li id="two" class="inactive">Two</li>
<li id="three" class="inactive">Three</li>
<li id="four" class="inactive">Four</li>
<li id="five" class="inactive">Five</li>
</ul>
<script>
$('#one').click(function () {
if ($(this).hasClass("inactive")) {
$(this).removeClass("inactive").addClass("active");
} else {
$(this).removeClass("active").addClass("inactive");
}
});
</script>
这可以工作:
$('.menu li').click(function () {
$('.menu li').not(this).removeClass('active').addClass('inactive');
$(this).addClass('active').removeClass('inactive');
});
或
$('.menu li').click(function () {
$('.menu li').removeClass('active').addClass('inactive');
$(this).toggleClass('active inactive');
});
第二种方法更短,但速度较慢。
http://jsperf.com/toggle-vs-add-remove
编辑:这个更短更快:
$('.menu li').click(function () {
$('.menu li').not(this).removeClass('active');
$(this).addClass('active');
});
如果性能真的是个问题,你可以将菜单存储在一个变量中,并对这个变量执行操作,比如:
var $menu = $('.menu li');
$menu.click(function () {
$menu.not(this).removeClass('active');
$(this).addClass('active');
});
为简洁起见:
$('ul.menu li').click(function () {
$(this).siblings().attr('class', 'inactive').end().toggleClass('inactive active');
});
JS Fiddle演示(127个字符,删除空白字符数:115)。
JS Fiddle的字符数很高,因为简洁似乎是目的。
不幸的是,考虑到下面评论中指出的问题,纠正后的实现比(目前接受的答案)更详细,替代方案是:
$('ul.menu li').click(function () {
var t = this;
$(this).siblings().add(t).attr('class', function (){
return t === this ? 'active' : 'inactive';
});
});
JS Fiddle演示(174个字符,删除空白字符数:133)。
或者:
$('ul.menu li').click(function () {
var t = this;
$(this).parent().children().attr('class', function (){
return t === this ? 'active' : 'inactive';
});
});
JS Fiddle演示(176个字符,删除空白字符数:135)。
当然,删除了空白的jQuery确实变得有些不可读,但仍然:我声称,呃,道德上的胜利。。。
参考文献:
- CCD_ 1
- CCD_ 2
children()
end()
siblings()
toggleClass()
$('ul li').click(function() {
$('ul li').each(function() {
$(this).removeClass('active');
});
$(this).addClass('active');
});
JSFiddle
如果SEO不重要,并且要使用较少的代码量,我会说使用单选按钮列表。然后,您可以使用":checked"选择器在JavaScript中进行样式和交互。
如果您已经在使用jQuery UI,您可以利用可选功能。这将用最少的代码量获得您想要的东西。http://jqueryui.com/selectable/
相关文章:
- 从项目列表Jquery中仅选择(显示:块)元素
- 如何处理多选下拉列表 - JQuery.
- 如果未选择第一项,请选择下拉列表 jQuery
- 要执行列表jquery,请划掉项目
- 如何修改代码以将其应用于三个下拉列表?(Jquery)
- 如何在下拉列表JQuery中添加reclick
- 正在执行函数列表jquery
- 引用SELECT列表jQuery
- 限制要在嵌套列表jQuery中添加的列表元素的数量
- 无序列表 jQuery 在固定位置显示列表中的选定项
- 从列表 JQUERY 中获取单击输入的正确名称
- 如何将项目添加到选定的追加列表 jQuery
- 如何选择特定的状态列表 Jquery.
- 单个列筛选不保存下拉列表 jQuery 的状态
- 谷歌日历事件列表jQuery格式
- 设置输入值后将列表拆分为多个小列表 - Jquery
- 尝试输出唯一数据属性列表(jQuery/Java)
- 如何在窗口宽度处删除类列表 - jquery/javascript
- 默认文本下拉列表jquery
- 从列表jquery中获取最接近的值