

jqueryでナビゲーションの現在地を判定させようとしています。
下記のようなソースで、URLとa要素のhref値が一致する場合はclass="here"をつけています。
$(function(){
$("#gnavi li a").each(function(){
if($(this).attr("href")==location.href)
$(this).toggleClass("here");
});
})
しかし
http://~~.com/hoge1/ → index.html
A.html
B.html
という構成だった場合、index.htmlはhereがつきますが、A、Bに移動するとhereがなくなってしまいます。
hoge1直下にあるファイルの場合どのような名前でもhereをつくようにするにはどうしたらよいのでしょうか。
よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
No1です。
補足を読んでも意味がさっぱりわからない。
locationが『http://ドメイン/hoge1/index.html』の時に、
ナビゲーションのhref属性値の 『http://ドメイン/hoge1/index.html』
と比較すると(同じなので)クラスが変更されるけれど、
locationが『http://ドメイン/hoge1/A.html』の時に、
href属性『http://ドメイン/hoge1/』のものをクラス変更したいという意味なのだろうか?
(上の比較方法では一致とみなされない)
でもそれって、リンク要素のhref属性だから、そのリンクをクリックするとフォルダ構成が表示されちゃうとか(禁止していれば出ないけど)になるので、リンクにならないと思うけれど??
ますますわからないけれど、もしも、『http://ドメイン/hoge1/A.html』と『http://ドメイン/hoge1/』を一致とみなしたいのなら、文字列の頭から比較すればよいだけなので
var loc = location.href;
$("#gnavi li a").each(function() {
var href = $(this).attr("href");
if (loc.substr(0, href.length) == href)
$(this).toggleClass("here");
});
(↑)元のコードそのままだけど、なんでtoggleClassなのかも不明。
(一度実行してセットするだけなのでaddClassではないの?)
この回答への補足
fujillinさん、レスありがとうございます。
どうも説明がへたで申し訳ありません。
http://ドメイン/hoge1/index.html
http://ドメイン/hoge1/a.html
http://ドメイン/hoge1/b.html
という具合にhoge1フォルダーに入っているhtmlが表示されているときはhoge1ボタンにあたる「"#gnavi li a.hoge1」にhereをつける
http://ドメイン/hoge2/index.html
http://ドメイン/hoge2/c.html
http://ドメイン/hoge2/d.html
とhoge2フォルダーについている場合は「"#gnavi li a.hoge2」にhereをつける
という風にしたいと考えています。
リンクURLは「http://ドメイン/hoge1/」「http://ドメイン/hoge2/」としているので、index.htmlの場合はhrefが同じになるのでhereがつきますが、他のページに移動すると●.htmlがつくため、不一致となりhereがつきません。
そこでURL全てではなく「http://ドメイン/hoge1/」までが一致ならhereをつけるというスクリプトにならないかと試しています。
toggleClassにしているのは、hoge1にhereがついたあとにhoge2に移ったときにhoge1につけたhereを削除する必要があると思っていたのですが、元のスクリプトをaddClassにしても問題はなかったです。ご指摘ありがとうございます。
No.3
- 回答日時:
完全をきすなら、
if($(this).get(0).href == document.location.protocol + '//'
+ document.location.hostname
+ document.location.pathname)
か。
この回答への補足
下記の回答とあわせてレスありがとうございます。
get()を調べておぼろげにDOMがわかりました…。
ただ今回はhttp://部分の問題ではなく、フォルダー以下のファイルではhtmlがつくことでパスが一致しなくなっています。
1)ナビゲーションのパスはhttp://ドメイン/hoge1/というようにフルパス記述。
2)フォルダーはhoge1、hoge2・・・とあり、hoge1の中にはindex.html、A.html、B.html・・・と入っている
3)hoge1/index.htmlの場合はhereがつきナビゲーションは反転する。
hoge1/A.htmlではhereはつかずナビゲーションは反転しない。
4)hoge1のフォルダーに入っているhtmlにアクセスする場合は「ナビゲーションhoge」にhereをつけ反転させたい。
5)htmlは今後も増える。
考えが混乱した状態で質問を投稿してしまい申し訳ございません。
http://ドメイン/hoge1/まで一致すればhereをつける前方一致のような方法があればぜひご教示いただければと思います。
よろしくお願いいたします。
No.2
- 回答日時:
$(this).attr("href")でなく、DOMのHTMLインターフェースで、
$(this).get(0).hrefで取得するとフルパスになるはず。
$(function(){
$("#gnavi li a").each(function(){
if($(this).get(0).href==location.href)
$(this).toggleClass("here");
});
})
windows.location.href は
document.locationやdocument.URL、document.documentURI
でもよしかな?。
No.1
- 回答日時:
推測ですが…
a要素のhref属性の指定がフルパスではないので、文字列比較が=にならないのでは?
(IEの場合は相対パスでもフルパスを返すらしいですが…)
以下のような感じではどうでしょうか?
相対パスでも「./A.html」のような指定方法をとっている場合は、さらに修正が必要と思われます。
$(function() {
var loc = location.href;
$("#gnavi li a").each(function() {
var href = $(this).attr("href");
if ( loc.slice(-href.length) == href)
$(this).toggleClass("here");
});
})
この回答への補足
回答ありがとうございます。
私の質問の仕方がわかりにくくて申し訳ありません。
ナビゲーションのパスはhttp://ドメイン/hoge1/というようにフルパス記述しており、index.htmlのページではhereがつきます。
同じhoge1フォルダー内にあるa.htmlやb.htmlにアクセスしたときはhoge/の後ろにHTML名がついてしまうためhereがつかないところまでは理解できています。
フォルダー内のファイルは今後も増えていくので、前方一致でhereをつけるようなことはできないでしょうか。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- HTML・CSS 下にスクロールしても、追従するボタンのコードを書いたのですが、ボタンの中の画像が半分しか表示されない 1 2022/04/16 21:31
- HTML・CSS スクロールすると追従する画像のコードを書いているのですが、追従する画像の大きさの調節が上手くいきませ 2 2022/04/18 12:52
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
画面上で、マウスに反応するス...
-
JavaScriptによるCSS変更がIE以...
-
jqueryでナビゲーションの現在...
-
jQuery 複数のライブラリーを表示
-
Ajaxで文字化けしてしまいます
-
AJAX+PHPでセレクトボックスの連動
-
flame越しの命令
-
文字列の操作
-
ajaxでエラー処理
-
inputタグ内にあるid属性の意味?
-
Folder.selectDialog()について
-
複数対応できるチェックボック...
-
jQueryの多重読込
-
XHTMLで外部JSファイルを読み込...
-
SQLのmaxで求めた値を変数に代...
-
カンマ区切りのデータを配列に...
-
javascriptで指定した部分のみ...
-
Access VBAで自動連番を振るには
-
classの値を得る
-
paperfold.jsのコーディングに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Javascriptでリンクの書き換え
-
選択範囲のリンク URL の抽出
-
bxsliderで画像毎に表示時間を...
-
自動目次作成のjavascriptの改...
-
URLによってHTMLのテキストを変...
-
要素ごとにイベントが発生させたい
-
Javascriptを使ってQRコード読...
-
jQueryで外部テキストファイル...
-
SQLのmaxで求めた値を変数に代...
-
JavascriptからPHPへのAjax通信...
-
JavaScriptでtabindexの変更っ...
-
カンマ区切りのデータを配列に...
-
[jQuery UI] sortableを使いaja...
-
jQueryのblockUIをformのボタン...
-
階層別の組織図の自動作成について
-
FullCalendar の複数月表示につ...
-
Selenium4でボタンをクリックで...
-
tableのtr要素をドラッグ&ドロ...
-
インラインフレームを自動更新...
-
マスターページ使用時のJavascript
おすすめ情報