多个导航部分都具有相同的链接。活动部分通过活动类 ( .active
) 显示在第一个导航中。我想在随后的导航部分中突出显示相同的链接。
最初,我使用了一种克隆方法(感谢您的好人,jQuery replaceWith() 每个元素都带有第一个),虽然它工作得很好,但它干扰了一些其他功能(因为它从页面中删除了原始元素并替换它们)。
所以,我需要想出另一种聪明的方法来检查第一部分的活动类,在后续部分中找到匹配的链接,然后应用该类。
我在想这样的事情......但是一些高效且不那么丑陋的事情。下面的答案确实有效。
HTML:
<nav class="postNav">
<ul>
<li class="active"><a href="#pageHeader">link to header</a></li>
<li><a href="#one">link to other posts</a></li>
<li><a href="#two">link to other posts</a></li>
<li><a href="#three">link to other posts</a></li>
<li><a href="#four">link to other posts</a></li>
<li><a href="#five">link to other posts</a></li>
</ul>
</nav>
JavaScript:
var navs = $('.postNav'),
first = navs.first(),
active = first.find('.active a').attr('href'),
anchrs = navs.not(first);
anchrs.find('li').removeClass('active');
anchrs.find('a[href=' + active + ']').parent().addClass('active');
更新
也许通过查看索引中的哪个孩子处于活动状态?那我就不需要按锚过滤了...
更新+最终答案
我的选择器缓存了 jfriend 的答案:
var nav = $('.postNav'),
first = nav.filter(':eq(0)'),
notF = nav.filter(':gt(0)'),
index = first.find('.active').index();
notF.each(function(){
$(this).find('li').removeClass('active').eq(index).addClass('active');
});