hampom TODAY

「TODAY」ってタイトルが付くブログが作りたいな、と思った10分後に作ったブログ。

自ページにリンクしているアンカーの親要素の css を書き換える

コメントする »

顔の黄色い人(@yashio)がなんか困っているようなので。

すごく解りづらいタイトルですが、 web app theme を使っていると ページヘッダー部の main-navigation 内の li 要素に対して active という class を指定すると、スタイルが変更される、という仕組みになっています。

上図「Active」という部分が該当します。

1ページずつ編集する事を考えると、ヘッダーやフッターをテンプレート化した際にとても面倒なので、私は以下のような javascript を使って対応しています。

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery", "1.3.2");</script>

<script type="text/javascript">
$(document).ready(function() {
  var uri = location.href;
  if (uri.match(/(https?[^?]+)(#.*)/)) {
    uri = RegExp.$1;
  }

  $("#main-navigation li").find("a[href='"+uri+"']").parent().addClass("active");
});

仕組みは、現在表示しているURLを取得して、そのURLをリンクしているa要素を探しだして parent() により親要素のclassに active を設定する。
という単純なものです。
このプログラムのままでは、リンクを完全なURL形式で書かないとリンクになりませんので注意が必要です。

2010.03.01 追記!

いまどきは、ページ送りなんかしたりすると URL に何ページなのかを付け加えたりするので、このプログラムだとそれらがうまく動かないよ!と顔が黄色い人(@yashio)にいわれたので、作り変えてみました。

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery", "1.3.2");</script>

<script type="text/javascript">
$(document).ready(function() {
var uri = location.href;
var path = location.pathname.split('/');

  if($("#main-navigation li").find("a[href='"+uri+"']").parent().addClass("active").length == 0) {
    for( numCnt = path.length - 1; numCnt > 0; numCnt-- ) {
      uri = uri.replace("/" + path[numCnt], "");
      if($("#main-navigation li").find("a[href='"+uri+"']").parent().addClass("active").length != 0)
        break;
    }
  }
});

投稿者: hampom

2010年 1月 12日 at 1:23 PM

カテゴリー: 未分類

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

フォロー

Get every new post delivered to your Inbox.

現在332人フォロワーがいます。