すべて同じリンクを持つ複数のナビゲーション セクション。アクティブなセクションは、アクティブなクラス ( .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');
});