質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

7044閲覧

URLとhrefが一緒のナビゲーションのaタグにis_activeを付けたい(2)

cotton88

総合スコア87

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2017/01/21 16:25

編集2017/01/22 14:56

数日前にした別の質問からの続きです。

【以前の質問】
https://teratail.com/questions/62574

少し言葉足らずで整理しきれなかったので、再質問です。
現在開いているページのパスが書かれたメニュー(aタグ)にis_activeを付けたいと思っています。

全て静的(CMS等動的ではない)でアコーディオンのようなアクションも付ける予定はありません。
メニューをクリックしたら該当のページに遷移する予定です。

ディレクトリの構成は下記のとおりです。
/sample1/
/sample1/example1.html(←ココを開くとうめく動作しない)
/sample1/aaa/
/sample1/aaa/example2.html
/sample1/aaa/bbb/
/sample1/aaa/bbb/example3.html
(各フォルダのインデックスページはindex.html)

以前の質問で理想のHTML1~3は、開いているページのメニューにis_activeを付けることができましたが、上記の場所を開いた時にis_activeが付いてくれませんでした。

下記は、前回のベストアンサーの回答者様が教えてくれたJSです。

javascript

1var currentPath = location.pathname.split("/"); 2var targetHref = "/" + currentPath[currentPath.length - 3] + "/" + currentPath[currentPath.length - 2] + "/" + currentPath[currentPath.length - 1]; 3targetHref = targetHref.split("index.html")[0]; //一応 4//↑ここは本番サイトに合わせてください。 5// 想定する結果A: /sample/ccc/example1.html 6// 想定する結果B: /sample/aaa/ 7 8navList = $(".side__navigation").find("a"); 9navList.each(function(){ 10 var myhref = $(this).attr("href"); 11 if( myhref === targetHref ) { 12 $(this).addClass("is_active"); 13 } 14} );

HTML

1<!-- 【理想のHTML1】 --> 2<!-- 現在URLが/sample/ccc/example1.htmlの時 --> 3<dl class="side__navigation"> 4 <dt>サンプル情報</dt> 5 <dd> 6 <nav role="navigation"> 7 <ul> 8 <li><a href="/sample/aaa/">サンプル</a></li> 9 <li><a href="/sample/bbb/">サンプル</a></li> 10 <li><a href="/sample/ccc/">サンプル</a> 11 <ul> 12 <li><a href="/sample/ccc/example1.html" class="is_active">開いているページ</a></li> 13 <li><a href="/sample/ccc/example2.html">サンプル</a></li> 14 <li><a href="/sample/ccc/example3.html">サンプル</a></li> 15 </ul> 16 </li> 17 <li><a href="/sample/ddd/">サンプル</a></li> 18 </ul> 19 </nav> 20 </dd> 21</dl>

HTML

1<!-- 【理想のHTML2】 --> 2<!-- 現在URLが/sample/ccc/の時 --> 3<dl class="side__navigation"> 4 <dt>サンプル情報</dt> 5 <dd> 6 <nav role="navigation"> 7 <ul> 8 <li><a href="/sample/aaa/">サンプル</a></li> 9 <li><a href="/sample/bbb/">サンプル</a></li> 10 <li><a href="/sample/ccc/" class="is_active">開いているページ</a> 11 <ul> 12 <li><a href="/sample/ccc/example1.html">サンプル</a></li> 13 <li><a href="/sample/ccc/example2.html">サンプル</a></li> 14 <li><a href="/sample/ccc/example3.html">サンプル</a></li> 15 </ul> 16 </li> 17 <li><a href="/sample/ddd/">サンプル</a></li> 18 </ul> 19 </nav> 20 </dd> 21</dl>

HTML

1<!-- 【理想のHTML3】 --> 2<!-- 現在URLが/sample/bbb/の時 --> 3<dl class="side__navigation"> 4 <dt>サンプル情報</dt> 5 <dd> 6 <nav role="navigation"> 7 <ul> 8 <li><a href="/sample/aaa/">サンプル</a></li> 9 <li><a href="/sample/bbb/" class="is_active">開いているページ</a></li> 10 <li><a href="/sample/ccc/">サンプル</a>li> 11 <li><a href="/sample/ddd/">サンプル</a></li> 12 </ul> 13 </nav> 14 </dd> 15</dl>

HTML

1<!-- 【理想のHTML4】 --> 2<!-- 現在URLが/sample/example4.htmlの時 --> 3<dl class="side__navigation"> 4 <dt>サンプル情報</dt> 5 <dd> 6 <nav role="navigation"> 7 <ul> 8 <li><a href="/sample/">サンプル</a></li> 9 <li><a href="/sample/example4.html" class="is_active">開いているページ</a></li> 10 <li><a href="/sample/example5.html">サンプル</a>li> 11 <li><a href="/sample/ddd/">サンプル</a></li> 12 </ul> 13 </nav> 14 </dd> 15</dl>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/01/21 16:33

JavaScriptが書かれていません。また、「メニューをクリックしたら(中略)付けたい」と書かれていますが、a要素をクリックしたらリンク先に移動します。そのあたりはどういう挙動を想定するかなど、具体的にお書きください。
guest

回答2

0

ベストアンサー

これでどうでしょうか。

javascript

1$(function(){ 2 $(".side__navigation a").each(function(){ 3 if(this.href == location.href) $(this).addClass("is_active"); 4 }); 5});

以前の質問を拝見しましたが、$(this).attr("href") を使っていますね。
今回は this.href を使いました。

  • $(this).attr("href") は、href属性の文字列をそのまま取得します。
  • $(this).prop("href")(あるいは単純に this.href) は実際にリンクする先のフルのURLを取得できます。

html

1<a id="link" href="hoge.html">リンク</a> 2<script> 3console.log($("#link").attr("href")); // hoge.html 4console.log($("#link").prop("href")); // http://○○○.○○○/○○○/hoge.html 5</script>

ですので、this.href を利用すれば location.href との単純比較で現在URLと一致しているかどうか確認することが出来ます。

投稿2017/01/22 02:24

編集2017/01/22 02:29
kura

総合スコア368

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2017/01/22 02:34

細かい話ですが $( this ).prop( 'href' ) とすれば jQuery でも採れますよ。
kura

2017/01/22 02:35

ありがとうございます。加筆致しました。
guest

0

超ダサダサでリファクタリングしていませんがなんとなくこんな感じですか?

JavaScript

1var activeUrls = location.pathname.split("/"); 2 if(activeUrls[activeUrls.length - 1].length == 0 ){ 3 activeUrls.pop(); 4 } 5 navList = $(".side__navigation").find("a"); 6 isFllag = false; 7 navList.each(parse); 8function parse(){ 9 var hrefs = $(this).attr("href").split("/"); 10 if(hrefs[hrefs.length - 1].length == 0){ 11 hrefs.pop(); 12 } 13 if( isActive(hrefs,activeUrls) ) { 14 $(this).addClass("is_active"); 15 } 16} 17 18var isFllag = false; 19function isActive(urlElementsA,urlElementsB){ 20 if(urlElementsA[urlElementsA.length - 1] === urlElementsB[urlElementsB.length -1]){ 21 return true; 22 } 23 if(!isFllag)return false; 24 if(urlElementsA[urlElementsA.length - 1].endsWith("html")){ 25 urlElementsA.pop(); 26 isFllag = true; 27 return isActive(urlElementsA,urlElementsB); 28 } 29 return false; 30} 31

isFlagは... 普通に消せるとは思いますがw

投稿2017/01/22 11:49

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問