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

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

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

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

Q&A

解決済

1回答

19761閲覧

カレントの実装(画像切り替え)

Brisk

総合スコア4

JavaScript

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

0グッド

0クリップ

投稿2021/06/09 01:27

編集2021/06/09 02:07

ナビのカレント表示を画像の切り替えで行いたいです。
参考サイト(https://www.snack-world.jp/trejarers/)

パスの該当階層部分(https://〇〇.net/〇〇/〇〇/index.html←この部分)とhrefリンク値が一致していれば、画像のファイル名入れ替え(デフォルトからオンに)
というふうに実装したいのですが、反映されません。

HTML

1 <nav id="navigation" class="main_nav"> 2 <div class="inner_nav"> 3 <ul class="mn_ul"> 4 <li class="mn_li_1"><a href="index.html"><img src="./asset/images/inc/nav_li_1_d.png" alt=""></a></li> 5 <li class="mn_li_2"><a href=""><img src="./asset/images/inc/nav_li_2_d.png" alt=""></a></li> 6 <li class="mn_li_3"><a href=""><img src="./asset/images/inc/nav_li_3_d.png" alt=""></a></li> 7 <li class="mn_li_4"><a href=""><img src="./asset/images/inc/nav_li_4_d.png" alt=""></a></li> 8 <li class="mn_li_5"><a href=""><img src="./asset/images/inc/nav_li_5_d.png" alt=""></a></li> 9 <li class="mn_li_6"><a href=""><img src="./asset/images/inc/nav_li_6_d.png" alt=""></a></li> 10 </ul> 11 12 </div> 13 </nav>

JS

1$(function(){ 2 3 var pageURL = location.pathname, 4 pageURLArr = pageURL.split('/'), //パスを分割して配列化する 5 pageURLArrCategory = pageURLArr[2]; //パスから第1階層を取得 6 7 $('.inner_nav > ul > li > a').each(function (i, v) { 8 var selfhref = $(v).attr('href'), 9 hrefArr = selfhref.split('/'), //href属性の値を分割して配列化する 10 hrefArrCategory = hrefArr[1]; //href属性の第1階層を取得 11 12 //パスの第1階層とhref属性の第1階層を比較して同じ値であれば画像名切り替え 13 if (pageURLArrCategory === hrefArrCategory) { 14 $(v).setAttribute("src", this.getAttribute("src").replace("_on.", "_d.")); 15 } 16 17 }); 18 19 });

お手数おかけいたしますが、
宜しくお願いします。

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

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

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

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

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

m.ts10806

2021/06/09 01:41

うまくいかない では何も伝わりませんので、実際に起きている現象を具体的に記載願います。 あと、Javascriptだけでは再現確認できませんので、他者がコピペで再現できるようご配慮願います
m.ts10806

2021/06/09 01:41

nav のことなら「ナビゲーション」の略なので強いてなら「ナビ」かと思います。
guest

回答1

0

ベストアンサー

とりあえず単純に間違っている個所だけでも列挙しておきます。

  • まず、質問文のa要素のhrefとpageLocationの階層は絶対に一致しません。なぜならどのa要素hrefにも階層に当たるパスが記載されていないからです。まずちゃんとしたテストデータをつくること。
  • pageLocationとhref、それぞれから取得する階層の位置が違う。html上のhref指定値がいい加減なので記載の配列番号で合っているか確認のしようがありません。正しいのであれば別に構いません。
  • 画像を切り替える部分の実装(ifの中)は全面的におかしい。

vはa要素なのにa要素のsrcを変更しようとしている。
jqueryオブジェクトに対してsetAttribute,getAttributeしているのも誤り。jqueryの基礎知識が全くない状態でコードを書いているのがよくわかる。
replaceの引数も誤り。_d_onに変更したいのであれば引数は逆。

以上のことを解決するためのアドバイスとしては、

  • ちゃんと作動するテストデータを作ること。「想定する状態」をしっかりイメージできないと最適なテストデータは作れない。
  • 検証ツールのブレークポイントやconsole.logで怪しいと思われる変数の中身を逐次チェックすること。今回の件ではsplitした結果や配列から取得した文字列が想定通りか確認しながら実装するべし。
  • jquery関数もメソッドチェーンでつないで書けるのがウリだけど初心者には途中経過が見えない悪魔の構文です。初心者マークが取れるまでは1関数ずつ切り離して都度中身をconsole.log等で確認したほうが良い。
  • jqueryの基礎知識が乏しいと思われるので、しっかり再勉強することをお勧めします。ネットの情報は断片的で体系だったものは皆無と考えていいので初心者向けの書籍を買って使い方を一通り習得するのが、結果的には遠回りになりません。

投稿2021/06/12 13:58

hope_mucci

総合スコア4447

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問