【发布时间】:2018-02-19 13:36:58
【问题描述】:
我想将列表的前六个和后六个项目应用与当前项目相同的样式,并将不同的样式应用于其他项目——那些超出 -6/+6 范围的项目。 (纯css接下来可以做6个,但我没能赶上前6个;+我希望当项目不在范围内时删除该类。)
到目前为止,我有一段功能性但冗余的 jquery 代码。有没有办法用数值指定 prev() 或 prevUntil() 函数?类似 prev(6) / next(6) 的东西?或者我应该使用 slice() 吗?
这是一段代码($navigationLink/s 指的是页面中的锚链接)。
if (!$navigationLink.parent().hasClass('sub-menu-current')) {
$navigationLinks.parent().removeClass('sub-menu-current');
$navigationLink.parent().addClass('sub-menu-current');
$('li').removeClass('sub-menu-previous-1');
$navigationLink.parent().prev().addClass('sub-menu-previous-1');
$('li').removeClass('sub-menu-next-1');
$navigationLink.parent().next().addClass('sub-menu-next-1');
$('li').removeClass('sub-menu-previous-2');
$navigationLink.parent().prev().prev().addClass('sub-menu-previous-2');
$('li').removeClass('sub-menu-next-2');
$navigationLink.parent().next().next().addClass('sub-menu-next-2');
$('li').removeClass('sub-menu-previous-3');
$navigationLink.parent().prev().prev().prev().addClass('sub-menu-previous-3');
$('li').removeClass('sub-menu-next-3');
$navigationLink.parent().next().next().next().addClass('sub-menu-next-3');
$('li').removeClass('sub-menu-previous-4');
$navigationLink.parent().prev().prev().prev().prev().addClass('sub-menu-previous-4');
$('li').removeClass('sub-menu-next-4');
$navigationLink.parent().next().next().next().next().addClass('sub-menu-next-4');
$('li').removeClass('sub-menu-previous-5');
$navigationLink.parent().prev().prev().prev().prev().prev().addClass('sub-menu-previous-5');
$('li').removeClass('sub-menu-next-5'); $navigationLink.parent().next().next().next().next().next().addClass('sub-menu-next-5');
$('li').removeClass('sub-menu-previous-6');
$navigationLink.parent().prev().prev().prev().prev().prev().prev().addClass('sub-menu-previous-6');
$('li').removeClass('sub-menu-next-6');
$navigationLink.parent().next().next().next().next().next().next().addClass('sub-menu-next-6');
}
注意:理想情况下,要显示的上一个和下一个项目的数量应该与视口相匹配,但这可能与我在这里的情况相去甚远。
【问题讨论】:
-
否 -
.prev(count)没有选项,因为.prev()只会给出确切的前一个兄弟。您是否有理由不想使用简单的 for 循环? (例如var el = $(this);for (var i=0;i<6;++i) { el.addClass("sub-menu"); el = el.prev(); if (el==null) break; }之类的东西)?
标签: jquery css list menu series