• ベストアンサー

リンクを押したときのDIVタグの動きの制御

早速質問させていただきます。 現在止まっているのは、DIVタグに有るid属性が変数かつ DIVタグが複数ある場合にどのように取得し、表示の制御をしようかと悩んでいます。 制御内容として、 有る一番上のところをクリックすると、他の開いている状態のDIVのSTYLEをnoneにするということを行いたいのです。 id属性が固定値なら何とかなると思うのですが、変数かつDIVタグがそのときによって数が変わるためどのように値を取得して制御すれば良いかわかりません。 以上なのですが、何か解決の糸口があればご教授ください。お願いいたします。

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

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

IE限定ですが、 document.all.tags("div")

参考URL:
http://www.openspc2.org/dhtml/javascript/method/tags/index.html
utatane
質問者

お礼

早速ありがとうございます。 今回は、仕様上IE5.5以上限定のようなので使用出来そうです。 そこで、一度初期化処理を行って、引数だけblockにしようと思って以下のように書きました(回答をいただく間もネットをさまよって調べていました) function init(){ divColl = document.all.tags("DIV"); for (i=0; i<divColl.length; i++) { if (divcoll(i).id != "notClose") { divColl(i).style.display = "none"; } } } function Disp(tName){ var tMenu = document.all[tName].style; if(tMenu.display == "block"){ init(); } else { init(); tMenu.display = "block"; } } 階層として2階層あり、最上位のDIVタグの部分は消してくないので if (divcoll(i).id != "notClose") というif文を入れたのですが、エラーで「オブジェクトを指定してください」といわれました。 単純に記述がidだけでは足りないのでしょうか? 再度補足をしていただけたらと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#199778
noname#199778
回答No.2

横から失礼します。 補足されているソースですが、 if (divcoll(i).id != "notClose") { divColl(i).style.display = "none"; このif分の条件文にある配列名が、アルファベットの大文字・小文字の不整合でオブジェクトが認識されていないように思います。 変数名・配列名・関数名などは、大文字小文字も区別されますので、多分これが原因なのではないかと。 if (divColl(i).id != "notClose") { に直せば動くと思いますよ。 横から失礼しました。

utatane
質問者

お礼

ありがとうございます。。。。。 完璧にボケてました^^; これでコンパイルエラーはなくなりましたが、 うまく切り替えまではいかず最上位だけ表示している状態になりました^^; ただ、alertでメッセージを出してみたら、noneとblock は切り替わっているようなのでまだどこかに単純なミスがあるかと・・・ 根詰めて探してみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • リンク押下でタグを書き換えたい

    リンクが複数あって、押したリンク文字だけ<span></span>のみにしたいと 思っています。また対応するdivタグのdisplay属性も書き換えたいです。 とりあえず思いついたのは以下の方法なのですが、冗長ですし、 リンクの数が増えた場合に足していくのが大変です。 もっとシンプルに書く方法がないものでしょうか。 ご助言ください。 <html> <body> <script> function change(spanid,divid,menuName){ document.getElementById('menu1').innerHTML = "<a href=\"javascript:void(0)\" onclick=\"change('menu1','div1','メニュー1')\">メニュー1</a>"; document.getElementById('div1').style.display="none"; document.getElementById('menu2').innerHTML = "<a href=\"javascript:void(0)\" onclick=\"change('menu2','div2','メニュー2')\">メニュー2</a>"; document.getElementById('div2').style.display="none"; document.getElementById('menu3').innerHTML = "<a href=\"javascript:void(0)\" onclick=\"change('menu3','div3','メニュー3')\">メニュー3</a>"; document.getElementById('div3').style.display="none"; document.getElementById(spanid).innerHTML = menuName; document.getElementById(divid).style.display="block"; } </script> <ul> <li><span id="menu1">メニュー1</span></li> <li><span id="menu2"><a href="javascript:void(0)" onclick="change('menu2','div2','メニュー2')">メニュー2</a></li> <li><span id="menu3"><a href="javascript:void(0)" onclick="change('menu3','div3','メニュー3')">メニュー3</a></li> </ul> <div id="div1"> test1 </div> <div id="div2" style="display:none"> test2 </div> <div id="div3" style="display:none"> test3 </div> </body> </html>

  • div にリンク

    a:hover {         background-color: #e0ffff; } div#input {         font-size:15px;         width:140;         border:solid 2px #000000;         padding:2px;         margin:3px;         list-style : none; } <div id="input"><a href="http://~" target="_blank">MAIL</a></div> 中の文字だけにリンクをしているところを、 <a href="http://~" target="_blank"><div id="input">MAIL</div></a> ・・と div 全体にリンクをすると、マウスポインタが変になります。 カーソルを合わせた時に指マークになりませんし、色も変化しません。 1クリックでリンク先には行けます。 どうしてでしょうか?また、通常どうりにはならないのでしょうか?

    • ベストアンサー
    • HTML
  • divタグ(span)についての質問です。

    divタグ(span)についての質問です。 ふと気になったのですが、divタグ(span)の名前は必ずつけないといけないのでしょうか?(【id="任意の名前"】の部分です) ただのブロック要素としてのみ使うときには、特にスタイルシートには記述しないので、名無しでも大丈夫なのかな~?と思いまして、、、 ご存知の方いらっしゃいましたらアドバイスをいただけると幸いですm(__)m 宜しくお願いいたします。

    • ベストアンサー
    • HTML
  • HTML の BUTTON タグの VALUE で指定した値を取得できません

    BUTTON タグは、NAME で変数名、VALUE でその値を指定してプログラムから参照できることになっていますね。 「value属性を使用すると、ボタンがクリックされたときに、<form>タグのaction属性で指定されたプログラムに渡す値を指定することができます。 <input>でボタンを定義する際のvalue属性は、ボタンに表示されるラベルを変更するものでしたが、<button>タグのvalue属性は、ラジオボタンやチェックボックスのvalue属性と同様、プログラムが参照する値を指定するものですので、間違わないように気をつけてください。 」 引用元:http://w-d-l.net/html__tags__body__form__button/ これを参考に、HTML で次のように書きました。 <button type="submit" name = "Number" value="1" style="..."><div style="...">表示内容</div></button> それを PHP プログラムで参照して出力しました。 print $_POST["Number"]; インターネットエクスプローラー(バージョン6 SP3)では、<div>~</div>が表示されてしまいます。 Firefox では値(1)が表示されています。 (これが正しい振る舞いと思います。) ブラウザにより振る舞いが異なっているので、とても困っています。 これは、インターネットエクスプローラー特有の症状でしょうか? また、回避策があればぜひ教えてください。

    • ベストアンサー
    • HTML
  • jqueryでhrefの値を取得して代入する方法

    jquery 初級者です。 下の様なaタグをクリックした時に、(リンク先に移動し)hrefの値と紐付けされているdivを開きたいのですが、どうしてもうまくいきません。 <a class="btn" href="#contents">開く</a> <div id="contents" style="display:none;"> 開きたいコンテンツ。通常は見えない。 </div> ※実際はこうしたリンク要素がたくさんあるため、hrefの値を取得する形にしたいのです。 どなたか詳しい方宜しくお願い致します。

  • FireFoxでのブロック表示・非表示制御

    DIVタグで囲んだ各ブロックの表示・非表示をJavascriptで動的に制御したく、下記のソースの通りJavascriptで表示の切り替え処理を記述したところ、IE6.0では動作しましたが、FireFox2.0では切り替えリンクをクリックしても無反応の状態となってしまいました。 FireFoxのJavascript互換について経験不足のため原因がつかめず困っております。 FireFoxでも動作可能となるには、どのような記述をすればよろしいでしょうか。もしご存知の方がおられましたら宜しくお願い致します。 *** Javascriptソース ****************** function showArea(areaId){ A.style.display="none"; B.style.display="none"; C.style.display="none"; areaId.style.display="block"; } *** ブロック切り替え用リンク ****************** <a href="javascript:showArea(A)">Aブロック</a> <a href="javascript:showArea(B)">Bブロック</a> <a href="javascript:showArea(C)">Cブロック</a> *** 表示用ブロック ****************** <div id="A"> Aブロックの記述内容 </div> <div id="B"> Bブロックの記述内容 </div> <div id="C"> Cブロックの記述内容 </div>

  • リンクメニュー収納を2つ以上つくりたいのですが

    こんにちは。今、ホームページを作っています。javascriptで上手くいかない点があるので、質問させていただきます。回答よろしくお願い致します。 文字をクリックしたら下にメニューが表示されるようにしたく、<head>タグ内に <script type="text/javascript"> <!-- function expand(id) { if (id.style.display == "none") { id.style.display = "";} else {id.style.display = "none";} window.event.cancelBubble = true;} // --> </script> <body>タグ内に <span class="list" onclick="expand(a);" style="cursor:hand;">【項目1】</span><div id="a" style="display:none"> <a href="リンクしたいURL">内容1</a><br> <a href="リンクしたいURL">内容2</a><br> <a href="リンクしたいURL">内容3</a> </div> としています。これが1つだと問題なく表示されるのですが、この下に<span class="list" onclick="expand(a);" style="cursor:hand;">【項目2】</span><div id="a" style="display:none">…など2つ以上続けるとエラーが出てしまい上手く表示されません。 出来れば、 【項目1】   内容1    ←【項目1】をクリックすると表示   内容2    ←   内容3…   ← 【項目2】   内容4…   ←【項目2】をクリックすると表示 【項目3】   内容5…   ←【項目3】をクリックすると表示 ・・・となるようにしたいのですが…。このような場合にはどうしたら良いのでしょうか。どなたかご回答よろしくお願いいたします。

    • ベストアンサー
    • Java
  • クリックで特定のdiv要素が表示されるJavascriptに追加機能を

    クリックで特定のdiv要素が表示されるJavascriptに追加機能を持たせたい よろしくお願い致します。 下記のようなコードで、HTML部分の「リンクテキスト」をクリックすると「クリックで開く内容」が表示され、かつ、リンクテキスト(id="link-1")の文字色が変わるJavascriptを使用しています。 ■Javascript部分 function showHide(targetID) { if( document.getElementById(targetID)) { if( document.getElementById(targetID).style.display == "none") { document.getElementById(targetID).style.display = "block"; document.getElementById('link-1').style.color = "#cc0000"; } else { document.getElementById(targetID).style.display = "none"; document.getElementById('link-1').style.color = "#000000"; } } } ■HTML部分 <a href="#" id="link-1" onClick="showHide('hoge1');return false;">リンクテキスト</a> <div id="hoge1" style="display:none;">クリックで開く内容</div> リンクテキストの文字色が変わる部分は見よう見まねで追加したのですが、文字色が変わる部分を、link-2、link-3・・というように同ページに複数配置したい場合、どのようなコードに変更すればよいのでしょうか。 できればid="link-1"などという記述はせずに、showHide('hoge1');をshowHide('hoge2');に変えて、<div id="hoge1" style="display:none;">を<div id="hogge2" style="display:none;">に変えるだけで、文字色も変わるようにできれば一番良いのですが、そのような方法はあるのでしょうか? 分かりにくい箇所は補足説明致しますので、どうぞご教授下さいますようお願い致します。

  • classの中の<a>タグにidを追加

    div class内のaタグにidを追加できる方法がないかを模索しておりますが、検索では直に(タグ)にidやclassを追加する方法しか出てきませんでした。 もしかしたら、突拍子もないことを言っているかもしれませんが JavaScriptに詳しい方アドバイス宜しくお願い致します。 id、classを割り当てるためのメソッド attr(属性, 属性値) $(function(){ $('ul').attr('id', 'style-ul'); $('li').attr('class', 'style-li');}

  • JavaScriptのdiv.style属性の変更が反映されない:最後

    JavaScriptのdiv.style属性の変更が反映されない:最後のDivタグを除いたすべてのDivタグに改ページ属性を有効にするようJavaScriptで制御したいと考えています。しかし、以下のようなプログラムでは、スタイル属性が更新されず改ページが実行されてしまうため、1枚真っ白な紙が印刷されることになってしまいます。こちらの意図したように動作させるにはどうしたらよいでしょうか。 <html> <head> <style> div.test { page-break-after:always; color:black; } </style> <script type="text/javascript"> window.onload = function() { var divs = document.getElementsByTagName('div'); for(i = divs.length - 1; i >= 0; i--){ if(divs[i].className == "test"){ divs[i].style.pageBreakAfter = ""; break; } } }; </script> </head> <body> <div class="test">テスト</div> <div class="test">テスト</div> <div class="test">テスト</div> </body> </html>