• 締切済み

他ページから直接タブにアクセスするには、以下をどうすればなりますか?

他ページから直接タブにアクセスするには、以下をどうすればなりますか? タブのidには、tbc_1~5までを設定しています。 function $(id) {return document.getElementById(id);} function tab(n) { var li=$("tab").getElementsByTagName("li"); for(var i=1;i<=li.length;i++){ $("tb_"+i).className=""; $("tbc_"+i).style.display="none"; } $("tb_"+n).className="on"; $("tbc_"+n).style.display="block"; }

みんなの回答

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.5

No4様がすでに回答なさっているのと、参考に挙げておられるサイトにも出ているので、No4の補足部分についてのコメントのみですが… ・連続して記述するのならscriptタグを分ける必要はなく一つですみます。 ・最初のfunction tab()と後のvar tabってバッティングしていない?(未確認) ・var tabの中に同じfunction tab()が定義されているけれど、無駄では? ・var tabはリスト形式の記述のはずだけれど、終わりの方で文法が違ってないか? ・終わりに呼ばれているthis.dive()ってどこにもないけど? 全体の構成について ・リンクでもタブが呼べるようにするのなら、ロード時にスクリプトでセットすることになるのでしょうから、表示/非表示をスタイルシートで初期設定せずに、初期設定は全部表示にしておいて、スクリプトで非表示にした方がよさそう(→javascriptオフのユーザを考慮) ・同様に、タブ側のリンクの形式もスクリプトにせずに参考サイトのようにページ内リンクにしておいた方が、スクリプトオフの時に通常のページ内リンクとして機能するのでよさそう。 ・各li要素にイベントをセットしなくても、上位のul要素(又はdocument)にひとつだけイベントをセットすれば同様のことが可能だし、項目の増減や順序の入れ替えに対しても管理が簡単。

全文を見る
すると、全ての回答が全文表示されます。
  • think49
  • ベストアンサー率59% (285/482)
回答No.4

#1 の補足より。 > http://archiva.jp/web/javascript/tab-menu2.html > 今のに上記URLに記載されているものを組み合わせれば可能っぽいですね。 そこまで理解しているのであれば、それほど難しくはないのでは…。 --- var target = document.getElementById(location.hash.slice(1)); if (target) target.style.display = 'block'; ---

ameblo-wo
質問者

補足

think49さんご回答ありがとうございます。 現在のタブを class="on" にて表示させているのですがうまくいきません。 【タブ部分のHTML】 <ul class="ul01 clearFix" id="tab"> <li id="tb_1" class="on"><a href="javascript:tab(1)">タブ1</a></li> <li id="tb_2"><a href="javascript:tab(2)">タブ2</a></li> <li id="tb_3"><a href="javascript:tab(3)">タブ3</a></li> <li id="tb_4"><a href="javascript:tab(4)">タブ4</a></li> <li id="tb_5"><a href="javascript:tab(5)">タブ5</a></li> </ul> <div class="box" id="tbc_1" style="display: block">ボックス1</div> <div class="box" id="tbc_2">ボックス2</div> <div class="box" id="tbc_3">ボックス3</div> <div class="box" id="tbc_4">ボックス4</div> <div class="box" id="tbc_5">ボックス5</div> 【他ページからタブへのリンク指定】 <a href="/tab/index.html#tbc_1">タブ1</a> <a href="/tab/index.html#tbc_2">タブ2</a> <a href="/tab/index.html#tbc_3">タブ3</a> <a href="/tab/index.html#tbc_4">タブ4</a> <a href="/tab/index.html#tbc_5">タブ5</a> 【javascript】 <script type="text/javascript"> function $(id) {return document.getElementById(id);} function tab(n) { var li=$("tab").getElementsByTagName("li"); for(var i=1;i<=li.length;i++){ $("tb_"+i).className=""; $("tbc_"+i).style.display="none"; } $("tb_"+n).className="on"; $("tbc_"+n).style.display="block"; } </script> <script type="text/javascript"> var tab = { init: function(){ var target = document.getElementById(location.hash.slice(1)); function tab(n) { var li=$("tab").getElementsByTagName("li"); for(var i=1;i<=li.length;i++){ $("tb_"+i).className=""; $("tbc_"+i).style.display="none"; } $("tb_"+n).className="on"; $("tbc_"+n).style.display="block"; } if (target) target.style.display = 'block'; } this.dive(); } </script>

全文を見る
すると、全ての回答が全文表示されます。
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.3

修正します。jQueryの$.contents()の中身を見て気づきました。 こおしときます。 function $(id) { var iframe=document.getElementsByTagName("iframe")[0]; var content; try{ content=iframe.contentDocument; return content.getElementById(id); }catch(e){ content=iframe.contentWindow.document return content.getElementById(id); } } もっと簡単に書けばよいか! これ↓ function $(id) { var iframe=document.getElementsByTagName("iframe")[0]; var content=iframe.contentDocument||iframe.contentWindow.document; return content.getElementById(id); }

ameblo-wo
質問者

お礼

yyr446さん何回もご回答いただきありがとうございます。 実装はiframeを利用していないんです。

全文を見る
すると、全ての回答が全文表示されます。
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

documentが余分でした。 IEの方がすっきりとiframe取得できんけど、 <iframe name="hoge" src="/gomi.htm"></iframe> function $(id) { var iframe=document.getElementsByTagName("iframe")[0]; var content; try{ content=iframe.contentDocument; return content.getElementById(id); }catch(e){ content=hoge.window.document; return content.getElementById(id); } } こうですね。

全文を見る
すると、全ての回答が全文表示されます。
  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

普通に、他ページから直接タブにアクセスする事は出来ません。 同じサイト(ドメイン)の他ページをページ内の<iframe>に 表示しているなら、出来ます。 function $(id) {return document.getElementById(id);} を function $(id) { iframe=document.getElementsByTagName("iframe")[0]; var content; try{ content=iframe.window.document; }catch(e){ content=iframe.contentDocument; } return content.document.getElementById(id); } にすれば、出来るかいな.. あるいは、AJAXの仕組みを作りたいという質問ですかね?

ameblo-wo
質問者

補足

質問後調べたところ、以下のURLにできることが書いてありました。 http://archiva.jp/web/javascript/tab-menu2.html 今のに上記URLに記載されているものを組み合わせれば可能っぽいですね。

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

関連するQ&A

  • ページを最初に表示したときオンになるタブを作る方法(css,javascript)

    cssとjavascriptを使ってタブを使用したページを作っています。 ページ表示時に一番左に表示される01タブを黒く表示しておいてほしいのですが、うまくいきません。 元にしたサンプルはちゃんと表示される仕様になっていましたが、いじっているうちにおかしくなったようです。 原因がわからないのでアドバイスいただけると大変ありがたいです。 よろしくお願い致します。 下記が制作中のhtmlです。 http://www014.upp.so-net.ne.jp/kanikko/test/test.html js中身******************* /*--setup--*/ window.onload=function() { tab.setup = { tabs: document.getElementById('tab').getElementsByTagName('li'), pages: [ document.getElementById('topics01'), document.getElementById('topics02'), document.getElementById('topics03'), document.getElementById('topics04'), document.getElementById('topics05'), document.getElementById('topics06'), document.getElementById('topics07') ] } tab.init(); } /*--setup end--*/ var tab = { init: function(){ var tabs = this.setup.tabs; var pages = this.setup.pages; for(i=0; i<pages.length; i++) { if(i !== 0) pages[i].style.display = 'none'; tabs[i].onclick = function(){ tab.showpage(this); return false; }; } }, showpage: function(obj){ var tabs = this.setup.tabs; var pages = this.setup.pages; var num; for(num=0; num<tabs.length; num++) { if(tabs[num] === obj) break; } for(var i=0; i<pages.length; i++) { if(i == num) { pages[num].style.display = 'block'; tabs[num].className = 'selected'; } else{ pages[i].style.display = 'none'; tabs[i].className = null; } } } } css中身******************* #javascript_tab_sample { width:448px; background:#ffffff; border:1px solid red; margin-bottom:10px; text-align:left; } #javascript_tab_sample ul#tab { margin:0; padding:0; border:1px solid black; background:blue; float:left; width:100%; } #javascript_tab_sample ul#tab li { text-align:center; border:1px solid orange; border-bottom:none; float:left; width:5em; } #javascript_tab_sample ul#tab li.selected { background-color:#000; } #javascript_tab_sample ul#tab li.selected a { color:#fff; }

    • ベストアンサー
    • HTML
  • JavaScriptエラーについて

    お世話になります。 おわかりになる方、ぜひ教えてください。 タブメニューのボタンを押すと、内容が切り替わるというJavaScriptなのですが、いちよう正常に動作はしているようなのですが、エラーがでてしまいます。 エラーを無くしたいのですが、どうすればいのでしょうか? 【エラー内容】 'document.getElementById()'はNullまたはオブジェクトではありません。 【HTML】 <div id="javascript_tab_sample"> <ul> <li><a href="#W3C">W3C</a></li> <li><a href="#xhtml">xhtml</a></li> </ul> <dl id="w3c"> <p>内容1</p> </dl> <dl id="xhtml"> <p>内容2</p> </dl> </div> 【JavaScript】 window.onload=function() { tab.setup = { tabs: document.getElementById('tab').getElementsByTagName('li'), pages: [ document.getElementById('w3c'), document.getElementById('xhtml') ] } tab.init(); } /*--setup end--*/ var tab = { init: function(){ var tabs = this.setup.tabs; var pages = this.setup.pages; for(i=0; i<pages.length; i++) { if(i !== 0) pages[i].style.display = 'none'; tabs[i].onclick = function(){ tab.showpage(this); return false; }; } }, showpage: function(obj){ var tabs = this.setup.tabs; var pages = this.setup.pages; var num; for(num=0; num<tabs.length; num++) { if(tabs[num] === obj) break; } for(var i=0; i<pages.length; i++) { if(i == num) { pages[num].style.display = 'block'; tabs[num].className = 'selected'; } else{ pages[i].style.display = 'none'; tabs[i].className = null; } } } } よろしくお願いします。

  • Java script エラー

    以前、質問して教えていただいたJava scriptですが、 サーバにアップしたところ Java script エラー 「pages[i].style.display = 'none';」が発生しました。 Java scriptの知識が全くない素人で申し訳ないのですが、 エラーの原因を教えていただけますでしょうか? よろしくお願いいたします。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "​http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">​ <html xmlns="​http://www.w3.org/1999/xhtml"​ xml:lang="ja" lang="ja"> <head> <title>タブ切替のサンプル</title> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> <script type="text/javascript"> // <![CDATA[ var tab = { peek:0, init: function(start){ var tabs = this.setup.tabs; var pages = this.setup.pages; for(var i=0; i<pages.length; i++) { if(i !== 0) pages[i].style.display = 'none'; tabs[i].onclick = function(){ tab.showpage(this); return false; }; } this.peek = start; this.showpage(tabs[this.peek]); }, showpage: function(obj){ var tabs = this.setup.tabs; var pages = this.setup.pages; var num; for(num=0; num<tabs.length; num++) { if(tabs[num] === obj) { tab.peek = num; break; } } for(var i=0; i<pages.length; i++) { if(i == num) { pages[num].style.display = 'block'; tabs[num].className = 'present'; } else{ pages[i].style.display = 'none'; tabs[i].className = null; } } } } function initialize(){ tab.setup = { tabs: document.getElementById('tab').getElementsByTagName('li'), pages: [ document.getElementById('page1'), document.getElementById('page2'), document.getElementById('page3'), document.getElementById('page4'), document.getElementById('page5') ] } tab.init(0); } function proceed(num){ if(tab.peek + num < tab.setup.tabs.length && 0 <= tab.peek + num){ tab.showpage(tab.setup.tabs[tab.peek + num]); } } // ]]> </script>

  • 折りたたみタグ 他を閉じる(非表示にする)

    折りたたみリンクが複数ある場合で、 一つ開くと他の開いた折りたたみリンクが閉じる(常に表示されるのは一つだけ)スクリプトを探しています。 以下のタグを使わせて頂いてます。 function show(inputData) { var objID=document.getElementById( "layer_" + inputData ); var buttonID=document.getElementById( "category_" + inputData ); if(objID.className=='close') { objID.style.display='block'; objID.className='open'; }else{ objID.style.display='none'; objID.className='close'; } } <a href="javascript:void(0)" id="category_@@@@" onClick="show('@@@@');"> リンク </a> <div id="layer_@@@@" style="display:none" class="close"> 隠れた内容 </div> http://homepage3.nifty.com/kmyh/gaku/hyouzi2.html こちらで見つけたので、少しの修正でなんとかできないかと上記の使っている ものを少しずついじって試してみたのですが、動かなくなるだけでしたので、 丸々スクリプトを取り替えてみたのですが、何が悪かったのか動きませんでした…。 既にたくさん使用しているので、できれば丸々とりかえるのではなく、 簡単な修正で変更できたらいいなと思っております…。 ご助力よろしくお願い致します。

  • active状態のリンクのみを他の画像に置き換える方法

    いつもお世話になっております。 下記のjsの記述で、リンクをクリックするとcssで指定した画像になるようにし、他の範囲内のリンクをクリックしない限りその画像のまま、という状態にしています。(ul id="jmenu"という形で指定しています) 今回は、 <h1>link</h1> <ul id="jmenu"> <li><a href="...">(´・ω・`)</li> </ul> <h1>wonder</h1> <iframe src="..."></iframe> <h1>quest</h1> <ul id="jmenu"> <li><a href="...">(´;ω;`)</li> </ul> という形で、(´・ω・`)をクリックした後、 (´;ω;`)クリックで(´・ω・`)をクリックしている状態を クリアにしたい、と考えているのですが、どのような記述が足りないのでしょうか? 現在ですと、(´・ω・`)がクリアされないため、 (´・ω・`)(´;ω;`)ともにクリックされている状態 (画像が変わっている状態)になってしまっています。 ご教授いただけますと、幸いです。よろしくお願いします。 window.onload=function(){ setColor(); } function setColor(){ var menu=document.getElementById("jmenu"); var tags=menu.getElementsByTagName("a"); for (var i=0;i<tags.length;i++){ tags[i].onclick=function(){ var pp=this.parentNode.parentNode; var tags=pp.getElementsByTagName("a"); for (var i=0;i<tags.length;i++){ tags[i].className=""; } this.className="foge"; } } }

  • cookie を利用して 別ページへ移動前に見ていたタブに戻す方法

    http://oshiete1.goo.ne.jp/qa5275862.html の質問に関連して、こちらももしどなた様かお教え頂けますなら、コメントを頂けますと大変嬉しいです。 宜しくお願い申し上げます。 ↑ 引用の【別ページへのURL移動なく、タブを切り替えて各対応する div 内の表示を切り替えるUI】につき、 該当部分を簡単に引用すると、以下のような原始的な javascript で書いています。 -------------------------------------------- window.onload = function(){ createTab(); showCategory('menu1'); setTabClick('menu1Nav','menu1'); setTabClick('menu2Nav','menu2'); setTabClick('menu3Nav','menu3'); setTabClick('menu4Nav','menu4'); setTabClick('menu5Nav','menu5'); preloadImages( ~ ); }; function hide(elementId) { document.getElementById(elementId).style.display = "none"; } function show(elementId) { document.getElementById(elementId).style.display = "block"; } function showCategory(categoryName){ hide('menu1'); hide('menu2'); hide('menu3'); hide('menu4'); hide('menu5'); show(categoryName); changeTab(categoryName); } function createTab() { var tab_wrap = document.getElementById("tab_wrap"); var tab_conts = document.getElementById("tab_conts"); var nav = document.createElement("ul"); nav.setAttribute('id','nav'); nav.appendChild(createListItem('menu1Nav','#menu1','メニュー1')); nav.appendChild(createListItem('menu2Nav','#menu2','メニュー2')); nav.appendChild(createListItem('menu3Nav','#menu3','メニュー3')); nav.appendChild(createListItem('menu4Nav','#menu4','メニュー4')); nav.appendChild(createListItem('menu5Nav','#menu5','メニュー5')); tab_wrap.insertBefore(nav,tab_conts); } function createListItem(id,href,text) { var li = document.createElement("li"); var a = document.createElement("a"); var t = document.createTextNode(text); li.setAttribute('id',id); a.setAttribute('href',href); a.appendChild(t); li.appendChild(a); return li; } function setTabClick(listName,categoryName) { var e = document.getElementById(listName).getElementsByTagName('a')[0]; e.onclick = function(){ showCategory(categoryName); return false; }; e.onfocus=function(){this.blur();} } function changeTab(categoryName){ var e = document.getElementById('nav'); e.className = categoryName; } --------------------------------------------------------------- この最初の window.onload = function(){ ~ で showCategory('menu1'); と、最初に表示されるタブ(& 該当 div)を固定で指定しているので、 特定タブに切り替えて、該当する内部の div 内のリンクなどから別ページに移動した後に【最初のタブのあるページ】に戻っても(history.back(); リンクからでもOK)、毎回「最初の menu1 のタブ & 該当 div」が表示されることになります。 この最初の window.onload を、この js 内に セット・ゲットcookie などを使って、現在の Yahoo JAPAN! のTOP上部タブのように、 【★ 別ページに移動した後に前ページへ戻ったら、最後に自分が見ていたタブが開いている状態で戻れる】 ようにできるとすれば、どのような記述をすれば良いでしょうか? サーバーサイドスクリプトではなく、cookie 利用で js でできれば良いのですが。 javascript 不勉強者には cookie コントロールは難しいかもしれませんが、例示でなく【具体的な記述方法】でご教授頂けますと大変幸いです。 ぐぐって調べましたが、適当なサンプルがどうしても見つからず、 ご理解の深い皆様の教えを頂けますと大変ありがたく。 何卒宜しくお願い申し上げます。

  • 別ページのインラインフレームに表示させる方法

    別ページのインラインフレームに表示させる方法 こんにちは。いつもお世話になっております。 数日前に自閉式ツリーについて質問させていただきました。 ありがとうございました。 http://okwave.jp/qa/q5526156.html --------------------------------------------------------------- <script type="text/javascript"> <!-- function tree2(menu_class,menu_id) { var div=document.getElementById(menu_id); if (div.style.display == "block") div.style.display="none"; else { var sib=div.parentNode.childNodes; for (var i=0; i < sib.length; i++) if (sib[i].className == menu_class) sib[i].style.display="none"; div.style.display="block"; } } // --></script> <style type="text/css"> <!-- .tree { display:none; } --></style> <p><a href="javascript:tree2('tree','menu1');" title="展開">展開</a></p> <div class="tree" id="menu1"> <ul> <li><a href="a.html" title="あ" target="frame">あ</a></li> <li><a href="aa.html" title="ああ" target="frame">ああ</a></li> </ul> </div> --------------------------------------------------------------- 【参考ページ】http://amenti.usamimi.info/treemenu2.html というふうに作っているのですが、たとえばAページの上記ツリーをクリックした際に内容がBページのインラインフレームframeに表示され、かつツリーが展開しているというような動作は可能でしょうか。 いろいろと高望みをしているとは思いますが、できればお力をお貸しください。 よろしくお願いします。

  • ツリーメニューで子のページのとき親が開く

    他のプログラムと連携しています 現時点ではクリックすれば親が開き子の部分が出てくるようにしています。 子のページのURLを見たときに ツリーのその親は自動的に開きたいのです。 show('1');のこの”1”は他のプログラムから出力しているものです。 子のものも同じように値を出力できるのですが JavaScriptでどのように書けば親が開くのかよくわかりません^^;。 よろしくお願いします。 //javascript// function show(inputData) { var objID=document.getElementById( "obj_" + inputData ); var buttonID=document.getElementById( "button_" + inputData ); if(objID.className=='close'){ objID.style.display='block'; objID.className='open'; buttonID.src='images/close.gif'; } else{ objID.style.display='none'; objID.className='close'; buttonID.src='images/open.gif'; } } //HTML// <ul> <li><input type="image" src="images/open.gif" id="button_1" onclick="show('1');"> <a href="javascript:show(1)">Aメニュー</a> </li> <div id="obj_1" style="display:none;position:relative;" class="close"> <ul><li><a href="11.html" >A-1メニュー </a></li> <li><a href="12.html">A-2メニュー </a></li> <li><a href="11.html" >A-3メニュー </a></li> </ul> </div> </ul> <ul> <li><input type="image" src="images/open.gif" id="button_2" onclick="show('2');"> <a href="javascript:show(2)">Bメニュー</a> </li> <div id="obj_2" style="display:none;position:relative;" class="close"> <ul><li><a href="21.html">B-1メニュー </a></li> <li><a href="22.html">B-2メニュー </a></li> <li><a href="23.html">B-3メニュー </a></li> </ul> </div> </ul>

  • cssでdisplay:noneを指定した時のプルダウンメニュー

    こんにちは、JavaScriptでプルダウンメニューを作ろうとして cssで予めdisplay:none;を指定したところ、 メニューがクリックしても開かなくなってしまいました。 html、css、JavaScriptの記述は以下の通りです。 html --------------------------------------- <span onclick="PullDown('term1')">クリック</span> <div id="term1"> <ul> <li>***********</li> <li>***********</li> </ul> </div> ----------------------------- css ------------------------------ div#term1 { display: none; } ------------------------------- JavaScript ------------------------------- function PullDown(id){ if(document.getElementById(id).style.display == 'none') document.getElementById(id).style.display=''; else document.getElementById(id).style.display='none'; } --------------------------------- cssの記述部分を無くすとちゃんと開いたり閉じたりと動作します。 また、 function Init(){ document.getElementById("term1").style.display="none"; } とJavaScriptで書いて、 bodyタグの所で <body onload="Init()">として呼び出してロード時に隠すようにするとちゃんと開閉してくれます。 cssでdisplay:none;と書くと動かなくなる理由と、 対策が分かる方居ましたら教えてください。

  • javascriptでタブ。曜日ごとに切り替える方法がわかりません。

    javascript初心者です。 javascriptでタブを作って曜日ごとに自動で切り替わるようにしたいのです。一生懸命考えてるのですがうまくいきません。 タブの作成はうまくいきました。以下がタブです。 function WeekTab( week ) { var i; for( i=0; i < 7; i++ ) { document.getElementById('week' + i ).style.display = 'none'; } document.getElementById('week' + week ).style.display = 'inline'; } --> ~~BODY~~~~~ <table class="week-tab"> <tr> <th onClick="WeekTab(0)" id="week_tab0">日曜</th> <th onClick="WeekTab(1)" id="week_tab1">月曜</th> <th onClick="WeekTab(2)" id="week_tab2">火曜</th> <th onClick="WeekTab(3)" id="week_tab3">水曜</th> <th onClick="WeekTab(4)" id="week_tab4">木曜</th> <th onClick="WeekTab(5)" id="week_tab5">金曜</th> <th onClick="WeekTab(6)" id="week_tab6">土曜</th> </tr> </table> <div id="week0" style="display:none;"> <h3>日曜</h3> </div>以下省略・・ このタブに曜日ごとに自動で切り替わるようにしたいのです。 どうか力を貸してくださいよろしくお願いします