「location.hash」について

このQ&Aのポイント
  • 「location.hash」は、JavaScriptで現在のURLのアンカー部分(#以降の部分)を取得するためのプロパティです。
  • 例えば、URLが「●●●.html#△△△」の場合、「location.hash」は「#△△△」となります。
  • ただし、上記のプログラムでは「?」以降のクエリ文字列も取得したい場合に対応できるようになっています。
回答を見る
  • ベストアンサー

「location.hash」について?

http://archiva.jp/web/javascript/tab-menu2.html 上記のサイトで説明されているプログラムで、「location.hash」が下記の様に使われています。 var hash = window.location.hash; hash = hash.split("?"); hash = hash[0].split("#"); URLが「●●●.html#△△△」の時には、「location.hash」は「#△△△」になると思います。 しかし、上記のプログラムでは、「●●●.html○○#△△△?▲▲」左記の様にURLがなっていると、想定されたプログラムです。 ページ内リンクのURLは、「●●●.html#△△△」であるので、「hash = hash.split("?");」「hash = hash[0].split("#");」の部分は不要ではないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

いろいろなURLの形で来ても対応できるようにじゃないかな? >しかし、上記のプログラムでは、「●●●.html○○#△△△?▲▲」左記の様にURLがなっていると、想定されたプログラムです。 index.html#tab1?p=1 上記のようにきたら今のロジックじゃないと動かないし。 絶対内部から確実に同じパラメータでしかこないならもっとロジックは限定できるけど 他にも想定できる場合は上のようなロジックになると思うよ。

prime2011
質問者

お礼

度々の助言を頂きまして有難うございます。 問題が明解に解決しました。 ありがとうございました。

その他の回答 (1)

回答No.1

うん、いらないね。 ただhash = hash[0].split("#");はいるんじゃない。 その例を提示しているサイトのロジックだと。

prime2011
質問者

お礼

回答を頂きましてありがとうございます。 確かに、「hash = hash[0].split("#");」は必要ですね。 つまり、「#△△△」を"#"を区切文字として、配列に代入した場合には、hash[0]=値無し、hash[1]=△△△、になると言う事ですね。 しかし、このサイトのコメント欄もたくさんの書き込みが有ったので、単純なミスがそのまま残っているとは思い難いです。 cgiやサーチを使う為のものかとも思いましたが、どう言う意図で書かれているのかが分かりませんでした。

関連するQ&A

  • javascriptでGETパラメータを扱う

    javascript初心者です。 javascriptでURLをGETパラメータとして取得して、その値を HTMLのaタグのリンク先に指定しようとしています。 こんな感じに出来たらいいと思っています。 ↓ <a href="[GETパラメータで取得したURL]">[GETパラメータで取得したURL]</a> GETパラメータの取得は自力で調べて下記のように記述すればできることがわかりましたが、 aタグのリンク先に指定する記述方法が分かりません。 助けてください。 よろしくお願いします。 <script type="text/javascript"> function getUrlVars() { var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for(var i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; } </script>

  • URLのパラメータを取得するスクリプトは?

    初心者です。 無謀にもURLのパラメータを取得するためのスクリプトを作成していますが、 どうしても分からなく・・。 例えば「http://pekepeke.com/sample.html?AA=1234&BB=9876」のURLから、「AA」「BB」の パラメータ「1234」「9876」を取得し表示したいと考えています。 色々調べながら・・・下記を作成したのですが、表示が1項目のみしかされません。。 (素人・・と笑われるかもしれませんが・・) どうしたら2つ(目標は10項目ぐらいですが)を項目別に行別に表示できるのかを教えて 下さい。。 ---------------サンプル <html> <head> <title>JS test</title> </head> <body> <script> function getUrlVars() { var vars = [], hash; var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for(var i = 0; i <hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; } var tag1 = null; var hash = getUrlVars(); var tag1 = 'AA ' +hash['AA'] var tag2 = null; var hash = getUrlVars(); var tag2 = 'BB ' +hash['BB'] document.write(tag1); document.write(tag2); </script> </body> </html> ------------------------------------------------ どうぞよろしくお願いします。

  • .split()

    javascriptに.split()というメソッドがありますが分割するという意味だと思いますが var thankyou = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); みたいな感じになったとき複数のオブジェクトになるのですか?

  • location.replaceについて

    親ページから子ページを表示います。 ※JavaScriptのwindow.openで子ページを開いています。 子ページにはテキストボックス等を配置していて項目を入力したら[閉じる]ボタンを押下して子ページを閉じて子ページで入力された値で親ページを再表示して反映させていますがここで1つ問題が発生してしまいました。 ※子ページの[閉じる]ボタンにはonClickでJavaScriptを設定しています。 JavaScriptの内容は下記の通りです。 function closeScript(){   window.opener.location.reload();   window.close(); } 押下すると「再試行」のダイアログが表示されてしまって・・・ ネットで検索して調べてみたら「再試行」のダイアログの制御はできないとの事でした。 再度、ネットで調べていたら下記のような記述がありました。   location.replace(location.href); 上記のJavaScriptを下記のように変更して子ページの[閉じる]ボタンを押下してみたら「再試行」のダイアログが表示されず、子ページを閉じる事が出来ました。 しかし、親ページは何も反応がないような・・・ そこで皆さんに質問があります。 「location.replace(location.href);」が何をやっているのかをネットで調べてみましたが・・・ 「location.replace」・・・「指定したページへ移動する」との事でした。 「location.href」・・・現在表示しているページのアドレス(URL)を示す文字列です。 上記のスクリプトは何を行っているのでしょうか。実際に動かしてもうんともすんとも言わないので・・・ くだらない質問で申し訳ありませんがわかりやすく教えていただけませんでしょうか。 宜しくお願いします。

  • location.hrefのURLについて

    以下のリンクの場合、現在表示しているアドレス(URL)が送られますが、 <a onclick="window.open('http://exsample.com='+encodeURIComponent(document.title)+' '+encodeURI(location.href));" href="javascript:void(0);"> これを指定したURLに変更したいのですが、その記述方法がわかりません。 ご教授よろしくお願いします。

  • javascriptの問題数を増やしたいです。

    javascriptの出題問題数を増やしたいです。 どこの数値を変更すればいいですか? 今10問までですけれども例えば40問まで増やしたいとすればどの数値を変更すればいいですか? window.onload = function(){ var data = location.href.split("?")[1]; var nowQ = data.substr(0,2); var allQ = data.substr(2,2); var okQ = data.substr(4,2); var nowA = data.substr(6,2); 参考URL https://www.kuuneruch.com/javascript01/ よろしくお願いします。

  • javascript : undefinedについて

    プログラム書き始めの初心者なのですがjavascriptでの「undefined」の表示に困っています。 prototype.jsを使っています。 以下がプログラムの一部なんですが MyPhotoObj= new Object(); //var MyPhotoObj.curUser; //var MyPhotoObj.curPic; var j=0; window.onload= function(){ // command syntax: MyPhotoR.html?room=Demo&user=ikeda&role=s&ctrl=1&w=320&h=240 //alert("MyPhotoOnLoad="+location.href); MyPhotoObj.MyDir=location.href.substring(0,location.href.indexOf("/MyPhotoR")+1); //alert(MyPhotoObj.MyDir); var keys= location.search.split("&"); MyPhotoObj.room=keys[0].split("=")[1]; MyPhotoObj.myName=keys[1].split("=")[1]; MyPhotoObj.curUser=keys[2].split("=")[1]; MyPhotoObj.role=keys[3].split("=")[1]; MyPhotoObj.ctrl=keys[4].split("=")[1]; MyPhotoObj.mess=keys[5].split("=")[1]; var width=53; var height=40;    ・・略・・ デバッグすると、 MyPhotoObj.myName=keys[1].split("=")[1]; の行で keys[1] is undefined というエラーがでます。 なぜでしょうか? 宜しくお願いします。

  • jQueryタブメニュー内、パネル間のリンク方法。

    javascript勉強中です。 立て続けに質問してしまい、ご迷惑おかけしておりますが協力していただければ幸いです。 下記のjQueryタブメニューですが、パネル内から他のパネルへのリンクを実装するには、どのように書いたらいいか教えていただけないでしょうか。例としてtest1のリンクからtab2へ行くように、です。 (下記実装されている機能は、タブメニューと他のページからのタブへのダイレクトリンクです。) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript"> jQuery(function($){  $(".area").hide();  var tabs = $(".tab01 li");  tabs.click(function(){   var i = tabs.removeClass("active").index(this);   tabs.eq(i).addClass("active");   $(".content .area").hide().eq(i).fadeIn(400);   return false;  });  var hash = window.location.hash.match(/#tab(\d+)/);  hash = hash?(tabs.eq(hash[1]-1).length?hash[1]-1:0):0;  tabs.eq(hash).click(); }); </script> </head> <body> <div id="tabs"> <ul class="tab01"> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> <div class="content"> <div class="area" id="tab1"><a href="#tab2">test1</a></div> <div class="area" id="tab2">test2</div> <div class="area" id="tab3">test3</div> </div> </div> </body> </html> 何卒宜しくお願い申し上げます。

  • 子ウィンドウを開くときに、親ウィンドウ(自分)を警告なしで閉じる。

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=805336 の続きというか、同じことなのですが、 以下のJavaScriptで、子ウィンドウが開かれるのですが、この際に開いた親ウィンドウを閉じたいのですが、普通に閉じると警告が出てしまいます。 警告なしで、子ウィンドウを開き、親ウィンドウを閉じる方法があれば、教えてください。 <script language="JavaScript"><!-- function MenuWindow(){ var bname = navigator.appName; var bversion = navigator.appVersion; var spchr = ";"; var bverS = bversion.split(spchr); var blsr = bverS[1]; var spchr = " "; var btype = blsr.split(spchr); var bcat = btype[1], bver = btype[2]; if ((bcat.indexOf("MSIE")<0)||(bver<5.0)) { res = window.alert("本プログラムは Internet Explore 5.0 以降の"+ "ブラウザ以外では動作しません。"); window.close(); } else { //location.href="menu.html"; var indexW; var swidth=screen.availWidth; var sheight=screen.availHeight; var wwidth=swidth*1.0; var leftpos=(swidth-wwidth); var wheight=sheight*1.0; var toppos=(sheight-wheight); window.resizeTo(wwidth,wheight); window.moveTo(leftpos,toppos); window.focus(); indexW = window.open("menu.html","",'resizable=yes,top=0,left=0'); indexW.resizeTo(swidth, sheight); //location.href="#"; } return true; } //--></script> </head> <body onLoad="MenuWindow()"> </body>

  • javascript の locationメソッド

    Javascript で、子(サブ)ウィンドを使っています 子ウィンドを開いて、とある処理を終了後に親ウィンドに指定のURLを表示させて子ウィンドを閉じる、という処理をしたいと思っています。 まず、親ウィンドにURLを渡すところはうまく動きます。 そのページはPHPで作られたページで、できており子ウィンドの処理でセッションに保存されたセッション変数を読み込んで動きます。 ページは遷移するのですが新しいセッション変数が読み込まれません。 ページをリロードすれば動作するので、子ウィンドを閉じる前に親ウィンドを再読込させればよいかな?と思ってreloadを入れてみました。 すると、リロードはしているようなのですが、今度は渡したURLに遷移しなくなってしまいました。 window.opener.location.replace(URL); window.opener.location.reload('true'); window.close(); このような処理はどうすればよろしいでしょうか? それとも諦めるしかありませんか? また、過去に同様な質問があるようでしたら、そのurlを教えていただけると幸いです。 見つけたのですが、探しきれませんでした。