JavaScriptでタグを切り替える方法とは?

このQ&Aのポイント
  • JavaScriptを使用してタグを切り替える方法を説明します。
  • 参考URLにあるJavaScriptを使用してタグを切り替える方法を説明しますが、IDセレクタの制約があります。
  • 他のページにも対応させるためには、IDセレクタではなくクラスセレクタを使用する必要があります。
回答を見る
  • ベストアンサー

タグを切り替えるJavaScriptについて

下記のurlを参考にして、タグを切り替えるJavaScriptを使いレイアウトをしています。 http://archiva.jp/web/javascript/tab-menu.html やりたいことは各内容をIDセレクタでくくりたいのです。 <div id="page1">  <h2>page1</h2>  <p>パンクズ</p>  <div class="nav">   <ul id="tab">    <li><a href="#page1"><span>page1を選択中</span></a></li>    <li><a href="#page2"><span>page2</span></a></li>    <li><a href="#page3"><span>pave3</span></a></li>   </ul>  </div>  <p>段落1</p> </div> <div id="page2">  <h2>page2</h2>  <p>パンクズ</p>  <div class="nav">   <ul id="tab2">    <li><a href="#page1"><span>page1</span></a></li>    <li><a href="#page2"><span>page2を選択中</span></a></li>    <li><a href="#page3"><span>pave3</span></a></li>   </ul>  </div>  <p>段落1</p> </div> ...page3 このようにやりたいのですが、JavaScriptがIDセレクタの"tab"にしか対応していないため、他のページにいくとクリックが効かなくなってしまいます。 idセレクタをclassセレクタに設定し直してもidセレクタにしか対応していないため効きません。 tag2とtab3に対応させるためにはどのようにすればいいでしょうか。 よろしくお願いします。

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

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

質問の意味が理解できていないのですけれど… タブのセットを複数作りたいのではなくって、各タブのパネル内にタブの表示を入れたいってことでしょうか? ちなみに、「タグ」(=HTMLのマークアップ用の記号)ではなく、「タブ」です。 当てずっぽの推理だと、<div id="page○">というのが各パネルになっていて、その中にナビゲーション用のタブがそれぞれあるってことでしょうか? 同じものを各パネルに入れて表示することの意味がわかりません。 どうせ表示しておくものなので、ご提示のサイトの例のようにひとつのものを利用するのが合理的ではないのでしょうか? 質問文を見ると「選択中」という表示を付け加えたいのかとも思われますが、ご提示のサイトのものでも選択中のものは表示が変わるようになっていますし、選択中のタブにはクラス設定がされるようになっているので、もっとはっきりさせたければタブの色を変えるとか、あるいはご質問文のように文字を付け加えるとかも可能かと思われます。 ご質問にの件に戻れば、もし、(↑)の想定があっているなら、ご提示のものも処理的にはほとんど同じです。 ただし、ご提示の構文からはパネルどれなのか不明なので(記述した人は識別できているでしょうが)、スクリプトの処理少し面倒かも… またまた、当てずっぽうで、idがpageで始まるdivが各パネルだと仮定すれば、こんなのでいけるかも。 (*全角空白は半角にして、</body>の直前に入れる) <script type="text/javascript"> <!-- (function(){  var div = document.getElementsByTagName("div");  var i = 0, d, panel = [];  while(d=div[i++]) if(/^page\d+$/.test(d.id)) panel.push(d);  var show = function(id){   var i, p, n;   for(i=0; p=panel[i++];) if(p.id == id){ n = i; break; }   if(n) for(i=0; p=panel[i++];) p.style.display = i==n?"":"none";  }  if(panel.length) show(panel[0].id); /*@cc_on@*/  document./*@if(1)attachEvent('on'+ @else@*/addEventListener(/*@end@*/'click', function(evt){   var t = evt./*@if(1)srcElement@else@*/target/*@end@*/;   var p = t.parentNode;   if(t.nodeName == "SPAN" && p.nodeName == "A")     show(p.href.match(/#(page\d+)$/)[1]);  }, false); })(); //--> </script>

rossi46mail
質問者

お礼

回答ありがとうございます。 fujillinさんの言う通り説明不足でした。 すみません。 fujillinさんの推理通り、各パネルの中にナビゲーション用のタブを入れたかったのです。 理由は2つあって、1つ目はパンクズです。 レイアウトを ↓パンクズ ↓タブ ↓パネル の順番に表示したかったのです。 各パネルは同ページ内なのでタブを切り替えてもパンクズが変わらないため困っていました。 これをやるにはパンクズ、タブ、パネルを全てパネルでくくればうまくいくと思ったのです。 2つ目の理由は、画像です。 上の質問の時は <span>page1を選択中</span> <span>page2</span> <span>page3</span> と表記したのですが、本当はタブをテキストではなく、それぞれの画像で表示したかったのです。それで上記のような書き方をしてしまいました。 画像は計6枚あります。 page1の画像 と page1の選択中の画像 page2の画像 と page2の選択中の画像 page3の画像 と page3の選択中の画像 cssで画像を切り替えようと考えたのですが、同ページ内なので画像置換もうまくできませんでした。 1つ目のパネルでくくるやり方でやれば_off_onで画像を切り替えるJavaScriptを使って切り替えることができると思いました。 私が説明を省略してしまったことで手間を取らせてしまって申し訳ありませんでした。 回答していただき、JavaScriptを記述までしていただいて本当にありがとうございました。 早速試してみます。 最後に、「タブ」でしたね。 恥ずかしいです。

rossi46mail
質問者

補足

パネルを3つにわけることでdisplay:noneが効かなかったのですが、解消されました。 ありがとうございます。 しかし、他のタブをクリックしてもパネルが切り替わりませんでした。 画像はcssの方でうまくいきました。 レイアウトを ↓パンクズ ↓タブ ↓パネル という風にしたかったのですが、 ↓タブ ↓パンクズ ↓パネル という風に変更しようかと思います。 回答していただいてありがとうございました。

関連するQ&A

  • タブメニューを上下に設置

    下記サイトを参考にタブメニューを作成しました。 http://5am.jp/jquery/jquery_ui_tabs/ こちらのタブを上下に配置し、selectされた状態も連動させたいと思っています。 スクリプトをどのように すればいいかお分かりの方がおられましたら ご教授頂けませんでしょうか。 <script type="text/javascript"> $(function() { $('#ui-tab > ul').tabs({ fx: { opacity: 'toggle', duration: 'normal' } }); }); </script> <div id="tabs"> <ul> <li><a href="#tab1"><span>タブ1</span></a></li> <li><a href="#tab2"><span>タブ2</span></a></li> <li><a href="#tab3"><span>タブ3</span></a></li> </ul> <div id="tab1"> <p>タブ1の内容</p> </div> <div id="tab2"> <p>タブ2の内容</p> </div> <div id="tab3"> <p>タブ3の内容</p> </div>       <ul class="bottom_tab"> <li><a href="#tab1"><span>タブ1</span></a></li> <li><a href="#tab2"><span>タブ2</span></a></li> <li><a href="#tab3"><span>タブ3</span></a></li> </ul> </div> どうぞ宜しくお願いいたします。

  • タグ切り替えのJavaScriptについて

    タグを切り替えるJavaScriptと http://archiva.jp/web/javascript/tab-menu.html (参考サイト) ロールオーバーのJavaScript http://css-happylife.com/template/14/ (参考サイト) この2つを組み合わせようと思ったのですが、どうにもうまくいきません。 今記述しているままではロールオーバーで画像が切り替わりますが、選択しているタグが元の画像に戻ってしまいます。 詳しく説明すると、タグ切り替えのサンプルページでは、Page3を押すとPage3のタグの部分が黒く切り替わっていると思います。しかし、今の記述ではロールオーバーの時しか画像が変わらずマウスを外すと元に戻ってしまいます。 サンプルページではフォントとbackgroud-colorを使用して #tab li a:hover, #tab li.present a { border-color: #333; color: #000; } ここで適用していると思います。 しかし、私は画像を使って切り替えたいのです。 色々試してみたのですが、どうにもうまくいかないため投稿しました。 お力添えよろしくお願いします。 ↓現在の記述↓ <!------------html------------> <ul id="tab"> <li><a href="#page1"><img src="img/about_gnavi_what_off.gif"></a></li> <li><a href="#page2"><img src="img/about_gnavi_type_off.gif"></a></li> <li><a href="#page3"><img src="img/about_gnavi_tellme_off.gif"></a></li> </ul> <!------------css------------> ul#tab{ margin:0; padding:0; } ul#tab li{ float:left; display:inline; margin:8px 0 0 10px; }

    • ベストアンサー
    • CSS
  • タブ切り替えについて

    更新情報を知らせるために、ヤフーのトップにあるトピック欄のようなものを作りたいのですが、どうすればいいでしょうか。 http://weble.org/2011/05/24/html-css-tab 上記のページを参考に、     <ul id="tab" class="tab clear"> <li><a href="#page1" class="blue">1</a></li> <li><a href="#page2" class="red">2</a></li> <li><a href="#page3" class="green">3</a></li> <li><a href="#page4" class="yellow">4</a></li>  </ul> <ul> <li><div id="page1">11111 </div></li> <li><div id="page2">22222 </div></li> <li><div id="page3">33333 </div></li> <li><div id="page4">44444 </div></li> </ul> と書いてタブ1の時はpage1を、タブ2ではpage2の内容を、という風には出来たのですが、 下記のようなリストがあり、タブを「全て」「果物」「動物」「家電」と4つ作り、「全て」のタブでは更新情報を全て載せ、それ以外のタブでは各項目の更新情報のみ載せるという方法がわかりません。 2011/08/11 りんご 2011/08/03 みかん 2011/07/30 犬 2011/07/30 テレビ 2011/07/27 猫 また現在、リストの呼び出しは同html内からなのですが、このままですと更新が重なるごとに記述が長くなってしまい、トップページの編集に支障が出てしまうと思うのですが、呼び出しは同htmlではなくても可能なのでしょうか。 単純に"呼び出したいhtml#xxx"と入れても別画面に切り替わってしまい駄目でした。 上手く、内容を説明できず伝わりにくいかと思いますが、よろしくお願いいたします。

  • 見出しタグのつけ方について

    見出しタグのつけ方について 見出しタグのつけ方が今一、理解できません。 下記のようなページの場合、適切な見出しタグのつけ方で適切なのはどれでしょうか? それとも、この3つの中には適切なのはないでしょうか? (特に、メニュー項目をどういう位置づけにしたらいいかがわかりません) 初歩的な質問ですが、よろしくお願い致します。 (1)h1・・・サイトの説明文  h2・・・サイト名  h3・・・Welcame,更新情報,関連リンク (2)h1・・・サイトの説明文  h2・・・Welcame,更新情報,関連リンク (3)h1・・・サイトの説明文  h2・・・HOME,ABOUT,WORKS,ACCESS,CONTACT  h3・・・Welcame,更新情報,関連リンク --------------HTML------------------- <body> <div id="header"> <div id="logo_box">サイト名</div> <h1>サイトの説明文 </h1> <ul id="header_navi" class="clearfix"> <li> <a href="#">HOME</a> </li> <li> <a href="#">ABOUT</a> </li> <li> <a href="#">WORKS</a> </li> <li> <a href="#">ACCESS</a> </li> <li> <a href="#">CONTACT</a> </li> </ul> </div> <div id="inner" class="clearfix"> <div id="contents"> <h3>Welcame</h3> <p>TEXT TEXT</p> </div> <div id="right"> <h3>更新情報</h3> <p>TEXT TEXT</p> <h3>関連リンク</h3> <p>TEXT TEXT</p> </div> </div> </body> ----------------------------------------------------

    • ベストアンサー
    • HTML
  • スマートフォン用サイトのアコーディオンメニュー

    スマートフォン用サイトのアコーディオンメニューを作成しています。 http://html-five.jp/140/ こちらのサイト様の情報をもとに2段のメニューが作ろうと思ったのですが、 空白のページが表示されてしまいますが、どこを修正したらよいのかわかりません。 記述したものは下記のとおりです。 解答よろしくお願いいたします。 <head> <link rel="stylesheet" href="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.css"> <script src="http://code.jquery.com/jquery-1.5.2.min.js"></script> <script src="http://code.jquery.com/mobile/1.0a4.1/jquery.mobile-1.0a4.1.min.js"></script> </head> <body> <script type="text/javascript"> $(".accordion p").click(function(){ $(this).next("ul").slideToggle(); $(this).children("span").toggleClass("open"); }); </script> <div> <ul> <li> <p><span>LIST 6</span></p> <ul> <li> <p><span>LIST 6-1</span></p> <ul> <li><a href="page01.html">LIST 6-1-1</a></li> <li><a href="page01.html">LIST 6-1-2</a></li> <li><a href="page01.html">LIST 6-1-3</a></li> </ul> </li> <li> <p><span>LIST 6-2</span></p> <ul> <li><a href="page01.html">LIST 6-2-1</a></li> <li><a href="page01.html">LIST 6-2-2</a></li> <li><a href="page01.html">LIST 6-2-3</a></li> </ul> </li> <li> <a href="page01.html">LIST 6-3 (not to open)</a> </li> </ul> </li> <li> <p><span>LIST 7</span></p> <ul> <li> <p><span>LIST 7-1</span></p> <ul> <li><a href="page01.html">LIST 7-1-1</a></li> <li><a href="page01.html">LIST 7-1-2</a></li> <li><a href="page01.html">LIST 7-1-3</a></li> </ul> </li> <li> <p><span>LIST 7-2</span></p> <ul> <li><a href="page01.html">LIST 7-2-1</a></li> <li><a href="page01.html">LIST 7-2-2</a></li> <li><a href="page01.html">LIST 7-2-3</a></li> </ul> </li> <li> <p><span>LIST 7-3</span></p> <ul> <li><a href="page01.html">LIST 7-3-1</a></li> <li><a href="page01.html">LIST 7-3-2</a></li> <li><a href="page01.html">LIST 7-3-3</a></li> </ul> </li> </ul> </li> </ul> </div> </body>

  • Jquery タブで、4つのliのうち、ひとつだけ除外

    お世話になります。あともう少しのところでうまくいきません! http://papermashup.com/demos/jquery-tabs/ 上記を使ってタブをやっています 【html】 <div id="test"> <ul> <li class="menu01"><a href="#tab-1">タブ1</a></li> <li class="menu02"><a href="#tab-2">タブ2</a></li> <li class="menu03"><a href="#tab-3">タブ3</a></li> <li class="menu04"><a href="/test/">こいつだけ違うページへ</a></li> </ul> <div id="tab-1">タブ1の中身</div> <div id="tab-2">タブ2の中身</div> <div id="tab-3">タブ3の中身</div> </div> 【Jquery】 <script type="text/javascript"> $(document).ready(function(){ $('#topserch div').hide(); $('#topserch div:first').show(); $('#topserch ul li:first').addClass('active'); $('#topserch ul li a').click(function(){ $('#topserch ul li').removeClass('active'); $(this).parent().addClass('active'); var currentTab = $(this).attr('href'); $('#topserch div').hide(); $(currentTab).show(); return false; }); }); </script> まずこのままだ4つ目のリンクはまったく動きません。 そこで、return false;を取ると、当然変な動きになります。 <li class="menu04"><a href="/test/">こいつだけ違うページへ</a></li> をクリックした時だけ、普通に別のページにジャンプさせるにはどうしたらよいのでしょうか?

  • javascriptで同一エレメントを抜き出したい

    javascriptでクリックしたエレメントの祖先のエレメントが全て同じだった場合に、 該当するもののタグ内の言葉を抜き出そうと思っているのですが、 どのようにすればすっきり書けるのかがわかりません。 例えば下の[例1]、[例2]はともに、「あ」をクリックしたときに、「あ」「い」「う」を抜き出して、「え」「お」は抜き出したくありません。 [例1] <div class = "a"> <ul> <li>あ</li> ←クリック <li>い</li> <li>う</li> </ul> </div> <ul> <li>え</li> <li>お</li> </ul> *** [例2] <div> <span><em>あ</em></span> ←クリック </div> <div> <span><em>い</em></span> </div> <div> <span><em>う</em></span> </div> <span><em>え</em></span> <span><em>お</em></span>

  • 大至急!!HPビルダー16の専門家の方教えて下さい

    自分でやっていてどうしてもわからなくて そこさえわかればUPできるのですが 大至急で教えてほしいのです。 フルCSSで作成しました。 左のサイドメニューのリストの画像を変更、位置も変えました。 そうしたら 元々、リストメニューのテキストがリンク先に飛ばせるようになっていたのですが それができなくなりました。 テキストの一行下の行でないと リンク先ページにいけないのです。 そこにはweb上にはなんの文字もないので そこにリンクが張ってあることが全くわからないのです。 何の変更もしていないページのタグをコピーして 貼り付けてもだめです。 どうすればよいのでしょう? ちなみに ●変更前のページのタグ <div id="hpb-nav"> <h3 class="hpb-c-index">ナビゲーション</h3> <ul> <li id="nav-toppage"><a href="#"><span class="en">top&nbsp;page</span><span class="ja">トップページ</span></a> <li id="nav-item"><a href="#"><span class="en">item&nbsp;list</span><span class="ja">商品一覧</span></a> <li id="nav-order"><a href="#"><span class="en">order</span><span class="ja">ご注文方法</span></a> <li id="nav-shop"><a href="#"><span class="en">shop&nbsp;info</span><span class="ja">ショップ案内</span></a> <li id="nav-campaign"><a href="#"><span class="en">campaign</span><span class="ja">キャンペーン</span></a> </ul> </div> <!-- navi end --><!-- aside --> <div id="hpb-aside"> <div id="ranking"> <h3>メニュー</h3> <ol> <li class="r01"><a href="#">商品名商品名商品名</a> <li class="r02"><a href="#">商品名商品名商品名</a> <li class="r03"><a href="kounenki/html">商品名</a> <li class="r04"><a href="kounenki/html">商品名</a> <li class="r05"><a href="hiesyou.html">商品名</a> </ol> </div> <div id="banner"> <h3 class="hpb-c-index">バナースペース</h3> <ul> <li><a href="#" id="banner-sale">SALE</a> <li><a href="#" id="banner-present">プレゼント</a> <li><a href="#" class="banner-magazine">メルマガ登録</a> <li><a href="#" id="banner-rss">RSS</a> </ul> </div> ちなみに(li class)は最初は(li id])でしたが変更しました。 ●変更後(鍼灸院のHP) <div id="ranking"> <h3>施術科目</h3> <ol> <li >肩こり腰痛<a href="file:///F:/builder/katakoriyoutuu.html">駅前で人気 オススメ 頭痛 肩こり 腰痛 </a> <li >頭痛<a>商品名商品名商品名</a> <li >アトピー<a href="file:///F:/builder/atopi-.html"> 駅前で人気 オススメ </a> <li>不妊症<a href="#">商品名商品名商品名</a> <li >自律神経失調症<a href="#">商品名商品名商品名</a> <li >不眠症<a href="#">商品名商品名商品名</a> <li >美顔はり<a href="#">商品名商品名商品名</a> <li >女性の気になる症状<a href="#">女性の気になる症状</a> <li >耳つぼダイエット<a href="#">商品名商品名商品名</a><br> </ol> </div> どうしても知りたいので もっとタグが必要ならおっしゃってください。 こちらもどこからいえばいいのかまったくわからないので。 よろしくお願いいたします。

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

    リンクが複数あって、押したリンク文字だけ<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>

  • カテゴリページ内 複数タブ

    wordpressでサイト作っています idの番号を変えることで1ページ内に#numの連番で複数タブを置ける様にはしたのですが、 while文のなかで番号に連番を振るやり方がわかりません。 初心者ですいませんが、よろしくお願いします <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/ … <script type="text/javascript"> $.hoge = function( target ) { //Default Action target.find(".tab_content").hide(); //Hide all content target.find("ul.tabs li:first").addClass("active").show(); //Activate first tab target.find(".tab_content:first").show(); //Show first tab content //On Click Event target.find("ul.tabs li").click(function() { target.find("ul.tabs li").removeClass("active"); //Remove any "active" class $(this).addClass("active"); //Add "active" class to selected tab target.find(".tab_content").hide(); //Hide all tab content var activeTab = $(this).find("a").attr("href"); //Find the rel attribute value to identify the active tab + content activeTab = activeTab.replace( '#', '.' ); target.find(activeTab).fadeIn(); //Fade in the active content return false; }); }// $.hoge // -------------------------------------- $(function() { $.hoge( $('#num1') ); $.hoge( $('#num2') ); }); </script> </head> <body> <div id="num1" class="container"> <ul class="tabs"> <li><a href="#tab1">Gallery</a></li> <li><a href="#tab2">Submit</a></li> </ul> <div class="tab_container"> <div class="tab1 tab_content"> <h2>Gallery</h2> </div> <div class="tab2 tab_content"> <h2>Submit</h2> </div> </div> </div> <div id="num2" class="container"> <ul class="tabs"> <li><a href="#tab1">Gallery</a></li> <li><a href="#tab2">Submit</a></li> </ul> <div class="tab_container"> <div class="tab1 tab_content"> <h2>Gallery</h2> </div> <div class="tab2 tab_content"> <h2>Submit</h2> </div> </div> </div> </body> </html>

専門家に質問してみよう