JavaScriptで汎用的なアンカーリンクを使う方法

このQ&Aのポイント
  • JavaScriptを使ってWebページ内での汎用的なアンカーリンクを実現する方法について
  • 左カテゴリーのリンクをクリックするとページが変化するが、サブカテゴリーは全てのページに共通しているため、汎用的に使いたい
  • 関数の中で、正常に動作しないアンカーリンクを修正する方法について
回答を見る
  • ベストアンサー

JavaScript で汎用的なアンカーリンクを使うには?

下に続いて画像集についてですが、 一つの Web Page 内にインラインフレームが3つあり、 左に大カテゴリー、右上にサブカテゴリー、右下に 画像リストがあります。 ここで左カテゴリーのリンクをクリックすると ページが変化するのは右下の画像リストのみで、 右上のサブカテゴリーは全てのページに共通してるので 汎用的に使いたいと思います。 これを category.html とします。 ここで右上のサブカテゴリーは右下の画像リストの アンカーに対応しており、例えば category1 ~ category5 があり 右下のフレームを name="picture", その web page を list.html とするなら function change(url) { window.parent.document.picture.location.href = url; } この関数の中で こちら ↓ onclick="change('list.html#category1');" は正常に使えますが onclick="change('#category1');" とすると category.html#category1 が表示されます。 この場合 category.html を汎用的に使うことは可能でしょうか? ちなみに、インターネットでこちらの source もみつけたんですが ここにうまく応用できません。。。 obj = document.getElementById(id_name); y = obj.offsetTop; scrollTo(0,y);

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

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

質問の意味がいまいち良く解らないんですが アンカーを呼ぶなら location.href を location.hash にしてみて下さい。 また汎用的にという部分ですが、 function change(str) { window.parent.document.picture.location.href = "list.html"+str; } onclick="change('#category1');" とすると、'list.html#category1'を指定したことになります・・・ 勘違いならごめんなさい・・ .

yasu182
質問者

お礼

説明がヘタで申し訳ないです。。。 具体的に言いますと、ホテル画像集を作ってまして 左のカテゴリーにはホテルのリストが50ぐらい、 右上のサブカテゴリーには プールサイド、外観、室内など5つのリンクがあります。 このサブカテゴリーは全てのホテルに共通してるので 汎用的に使いたいと思ってます。 location.hash は IE で動いたのですが firefox では使えませんでした。。。 自分の設置の仕方が間違ってるのでしょうか? "list.html"+str; にヒントを得て現在のファイル名を取得してみたのですが、 original = window.parent.document.picture.location.href; function change(url){     url = original + url;     window.parent.document.picture.location.href = url; } こちらも IE のみで動作可能でした。 なにかアドバイスありますでしょうか?

関連するQ&A

  • javascript 「折りたためるリスト」

    javascript初学者です。 「折りたためるリスト」について、皆さまにお教え頂きたいことがあり投稿しました。 以下のプログラムのような「折りたためるリスト」があると仮定します。「野菜すべて」をクリックすると、「大根、にんじん、レタス」が表示される折りたためるリストです。 通常、折りたたまれたリストを表示した後にリロードすればリストがたたまれてしまいますが、リロードしてもなおリストがたたまれず、「大根、にんじん、レタス」が表示された状態のままにするにはプログラムをどのように改良すればよいでしょうか。 (例:大根とにんじんにチェックを付けた後にリロードすると、リストがたたまれてしまうため何にチェックが付いているのかわからなくなってしまいます。リロードしてもリストが閉じることなく、リストを表示したままにしたい、と一生懸命やっているのですが、私のjavascriptの知識では解決できないのです(涙)。) なにぶんjavascriptが苦手でどうにもお手上げ状態です。 大変お手数をお掛けしますが、どうぞよろしくお願いいたします。 「折りたためるリスト」プログラム ----------------------------------------------------------------------- <html> <body> <input id="all" name="test1" type="checkbox" value="1"><a href="URL" onclick="oritatami('1');return false">野菜すべて</a><br> <div id="1" style="display:none">   <input name="test1" type="checkbox" value="10">大根<br>   <input name="test1" type="checkbox" value="11">にんじん<br>   <input name="test1" type="checkbox" value="11">レタス<br> </div> <script type="text/javascript"> function oritatami(id){ obj=(document.all)?document.all(id):((document.getElementById)?document.getElementById(id):null); if(obj) obj.style.display=(obj.style.display=="none")?"block":"none"; } </script> </body> </html> -----------------------------------------------------------------------

  • 画像集、小画像をクリックすると大画像を中央表示するには?

    画像集を作ってるのですが、 テーブルの中に小さな画像の一覧があり、 クリックするとその大きな画像が表示され、 なおかつページの真ん中に表示されるものを作成中です。 自分が思うに、width=100% height=100% のテーブルの中に画像リストのテーブルを入れ テーブル名を table とするなら、 そこにある小さな画像を onclick すると document.table.location.href = picture; または document.table.src = picture; のようなイメージでテーブルと大画像を置き換えれば できると思うのですが、うまくいきません。 なにかアドバイスありますでしょうか? もちろん 写真ごとにセンター寄せの web page を作り 普通にリンクという方法もありますが、写真が増えると あまり効率が良いとは言えず。。。

  • JavaScriptで呼び出したテキストリンクを画像にするには

    Java Scriptで呼び出したテキストリンクを、画像に替えたいのですがうまくいきません。人がつくったScriptの改造なので、今ひとつわかりにくくて困っています。 ソースは function callJavascript(str) { var obj = parent.document.getElementById('maryleTVLink'); obj.innerHTML = "<a href='http://localhost:8888/cb/cframe_play.php?user=tbsv1&idx=" +str+ "' onclick=\"return GB_myShow('MaryleTV', this.href)\">大きく見る</a>" ; } です。 作りとしては、callJavascriptを読み込んでいる画像(Flash)をクリックすると、テキストリンクが表示される、というものです。 「大きく見る」の部分を画像のボタンにしたいのですが、 どうしたら良いか教えてください。

  • アンカー座標の取得ができず、スクロールしない。

    Q&Aサイトを作成しています。 Q1の答えにある「こちら」をクリックしたら、Q20の答え部分を表示させるように作成しています。 実際には質問数が多く、Q20の答え部分までスクロールさせたいので、 アンカーを設定した座標を y = obj.offsetTop; で取得しているつもりなのですが、 うまくスクロールされません。 どこが間違っているのか教えて頂けないでしょうか? よろしくお願いします。 <script type="text/javascript"> <!-- function ShowAanswer(n) { var target = document.getElementById('answerbox'+n); if( target.style.display != "block" ) { target.style.display = "block"; } else { target.style.display = "none"; } } function AnswerOpen(id_place){ obj = document.getElementById(id_place).click(); y = obj.offsetTop; scrollTo(0,y); } // --> </script> <title>TEST</title> </head> <body> <dl> <dt onclick="ShowAanswer(1)">Q1. 質問</dt> <dd id="answerbox1" onclick="ShowAanswer(1)">Q1の答え<br /><a href="JavaScript:AnswerOpen('kotae')">こちら</a>を参照してください。</dd> </dl> <dl> <dt onclick="ShowAanswer(2)">Q2. 質問</dt> <dd id="answerbox2" onclick="ShowAanswer(2)">Q2の答え</dd> </dl> <dl> <dt onclick="ShowAanswer(3)">Q3. 質問</dt> <dd id="answerbox3" onclick="ShowAanswer(3)">Q3の答え</dd> </dl> <dl> <dt onclick="ShowAanswer(4)">Q20. 質問</dt> <dd id="answerbox4" onclick="ShowAanswer(4)"><a id="kotae">Q20の答え</a></dd> </dl> </body> </html>

  • JavaScriptで配列を取得したい

    お世話になります。 データベースから取得したリスト(可変)をフォームに設定したところ、 JavaScriptで配列を参照したところ、リストが1件の場合はエラー、 3件の場合は正常という現象がおき、困っております。 リストが1件の場合でも、配列に認識させたいのですが、 他の箇所も記述が多いためシンプルな手法を探しています。 よろしくお願い致します。 3件のレコードの場合、正常に処理される。 ---- HTML内 -------------- <input type="checkbox" name="chk_sel"> <input type="checkbox" name="chk_sel"> <input type="checkbox" name="chk_sel"> ---- JavaScript内 -------------- function test(){ var obj = document.form1.chk_sel; if (obj != null) { for(i=0;i<obj.length;i++){ if(obj[i].checked == true){ check_num++; } } } } ----------------------------- ■1件のレコードの場合、エラーになる (配列に認識されないらしく、obj.lengthが取得できない) ---- HTML内 -------------- <input type="checkbox" name="chk_sel"> ---- JavaScript内 -------------- function test(){ var obj = document.form1.chk_sel; if (obj != null) { for(i=0;i<obj.length;i++){ if(obj[i].checked == true){ check_num++; } } } } -----------------------------

  • JavaScriptの正規表現について

    お世話になります。 HTMLでテキストに入力された数値のチェックを下記のようにJavaScriptで行っています。 ---------------------------------------------------------  function check_num(obj) {')   obj_w = document.form_name.elements[obj];')   if(obj_w.value.match(/^\d{0,1}(\.\d{1,3})?$/)){    return 0;   else{    alert("測定値は整数部分1桁、小数部分3桁までの正の数値を入力して下さい。")    obj_w.focus();    return 1;   }  } ----------------------------------------------------------- このとき、チェックする整数部分、小数部分の桁数を変数にして汎用性のある関数にしたいのですが、正規表現のなかで変数を使うにはどのようにしたらよいのでしょうか? よろしくお願い致します。

  • ボタンに書かれている文字の入れ替え

    2つのボタンのどちらを押しても、ボタンに書かれているアルファベットが入れ替わるようにしたいのですが、うまくいきません。 alert(obj1)、alert(obj2)などとして、A,Bともに読み込まれているようなのですが、alert(tmp)の時はundefinedがでます。 どこが間違っているのかよろしければ教えてください。 <!doctype html> <html> <head> <meta charset="utf-8"> <title>勉強中</title> </head> <body> <script> function change_alphabet() { var tmp; var obj1 = document.getElementById("button_1").value; var obj2 = document.getElementById("button_2").value; // alert(obj1); // alert(obj2); tmp = obj1.innerHTML; // alert(tmp); obj1.innerHTML = obj2.innerHTML; obj2.innerHTML = tmp; // alert(obj2); } </script> < input type = "button" id = "button_1" value = "A" style = "width: 25px; height: 25px" onclick = "change_alphabet()" > < input type = "button" id = "button_2" value = "B" style = "width: 25px; height: 25px" onclick = "change_alphabet()" > <body> </html>

  • onClickイベントの変更方法

    JavaScriptのonclickイベントについてですが、  <form name="fm">  <input type="button" name="bt" value="開始" onclick="Change(1)"> という感じのフォームで、ボタンを押すとChange関数の方で、  if(f == 1) {    document.fm.bt.value="停止";    document.fm.bt.onclick="Change(0)"; //(A) として、onclickイベントの内容を変更したいのですが、 実際には上のような(A)の文では、 エラーは出ませんが、イベントの実行はできません。 onclickイベントの変更方法をご教授下さい。 ちなみに、プログラム自体は別の方法で対処しましたので、 「もっといい方法がある」というご回答は結構です。 それと、もう一つ教えていただきたいのですが、上の例で、  document.writeln(document.fm.bt.onClick); と実行すると"undefined"と表示されますが、  document.writeln(document.fm.bt.onclick); //(onClickのCが小文字) と実行すると"function anonymous() { Change(1) } "と表示されます。 大文字と小文字で、なぜ動作が変わるのでしょうか? ご教授下さい。

  • firefox(3.6.10)で、新しいウィンドウを開いて、POSTデ

    firefox(3.6.10)で、新しいウィンドウを開いて、POSTデータを送るには、どのように書けばいいでしょうか?現在のソースではIE7でしか正常に動作しませんでした(ついでにSleipnirでも動作できるとありがたいです)。 <script> function openNewWindow(url){ obj = document.change; window.open(url, "targetWindow", "width=550,height=550,scrollbars=yes,resizable=yes,status=yes"); // フォームのサブミット obj.method = "post"; obj.action = url; obj.submit(); } </script> <form name="change" action="myself.php" method="post" target="targetWindow"> <input type="button" value="送信" onClick="openNewWindow('newWindow'); return false;"> <input type="hidden" name="hidden_data" value="hoge"> </form>

  • JavaScript onClick

    JavaScript初心者です。 クリックしたら音が出るようにしたいのですが音がでません。 どなたかご回答よろしくお願いします。 <html> <head> <script language = "JavaScript"> <!-- function sound(name){ document.all.music.src = name; } --> </script> </head> <body> <bgsound src = # id = music autostart = true loop = true> <a href = # onClick = sound("img/oto.mp3")> <img src="img/picture.jpg"> </a> </body> </html>

専門家に質問してみよう