- ベストアンサー
タブボックスを複数設置する方法
- タブボックスを複数設置する方法についてご教授ください。
- 質問者は初心者で、ページ内に連番のタブボックスをたくさん設置したいと考えています。
- 現在のコードでは、Toggleの記述がうまく動かない状況です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
何をなさりたいのかよくわかってませんが・・・ タブ形式の表示が複数あるHTMLに対してスクリプトでタブとして機能するようにしたいのではないかと想像しました。 ご質問に対する直接の回答にはなっていませんが、 まず、ご提示の様な番号を振る考え方から脱却したほうがよさそうに思われます。 (ご提示のHTMLだとidが重複しているので、文法違反にもなっています) ざっと見たところ、<ul class="tab_menu">とそれに続く<div class="tab_box">がセットになっていて、タブの要素を構成していると見受けました。 タブ的な切替表示ができれば良いだけであれば、要素の位置関係を利用して処理するようにすればよいと思われます。例えば、2番目のタブ(LI要素)をクリックしたら、2番目のコンテンツ(DIV要素)を表示するといった感じです。 これによって、idや番号は不要になりますし、li要素内ののリンクタグも不要にできます。(href属性の参照はしなくなるので) 制御で必要になるのは要素の意味を示すクラスだけで充分ですし、それは同時に、レイアウトや表示を制御するためにCSSで必要とする識別子としても(多分)十分なのではないでしょうか? 現状のままでも良いですし、わかりやすくする意味でtab_menuとtab_boxをセットにして(例えばtab_setで)ラップしておいても良いかと思います。 スクリプトは『同じtab_set内で対応する順序の要素を表示する』といった内容で作成すれば、セットの数によることなく処理が可能ですし、タブの数がそれぞれで違っていても問題ないでしょう。 tab_menu内のLI要素数とtab_box内のDIV要素数が異なっている場合(通常はないはずですが)にスクリプトのエラーがおきる可能性がありますが、対応する要素が存在しない場合は処理しないようにするなどで、HTMLがおかしな場合でもエラーを回避することは可能と思われます。
その他の回答 (1)
- fujillin
- ベストアンサー率61% (1594/2576)
ANo1です。 ごく一般的なタブ機能のようですから、検索すればサンプルはいくらでも見つかるはずと思います。(考え方や方法はいろいろあると思いますが) また、jQueryをご利用のようですが、jQuery UIにも標準的なタブ機能が備えられています。 http://jqueryui.com/tabs/ とはいえ、簡単なサンプルを一例として… <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <html lang="ja"> <head><title>Sample</title> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <style type="text/css"> .tab_set *{ margin:0; padding:0; list-style-type:none; } .tab_set{ width:600px; margin-bottom:30px; } .tab_menu li{ width:86px; display:inline-block; padding:4px; margin-right:4px; text-align:center; color:#888; background-color:#E8E8E8; border:1px solid #AAA; } .tab_menu li.active{ color:#000; background-color:#FFF; border-bottom:1px solid #FFF; } .tab_box{ position:relative; top:-1px; z-index:-1; } .tab_box>div{ height:300px; padding:10px; border:1px solid #AAA; } </style> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript"> $(function(){ var active = "active"; $(".tab_set").each(function(){ $(".tab_menu li", this).click(function(){ var tabs = $(this).parent(".tab_menu").children(); tabs.removeClass(active); $(this).addClass(active); var contents = $(this).parents(".tab_set").find(".tab_box").children("div"); contents.hide().eq(tabs.index(this)).show(); }).eq(0).click(); }); }); </script> </head> <body> <div class="tab_set"> <ul class="tab_menu"> <li>タブ1</li><li>タブ2</li><li>タブ3</li> </ul> <div class="tab_box"> <div>タブボックス1</div> <div>タブボックス2</div> <div>タブボックス3</div> </div> </div> <div class="tab_set"> <ul class="tab_menu"> <li>タブ1</li><li>タブ2</li><li>タブ3</li><li>タブ4</li><li>タブ5</li> </ul> <div class="tab_box"> <div>タブボックス1</div> <div>タブボックス2</div> <div>タブボックス3</div> <div>タブボックス4</div> <div>タブボックス5</div> </div> </div> <div class="tab_set"> <ul class="tab_menu"> <li>タブ1</li><li>タブ2</li><li>タブ3</li> </ul> <div class="tab_box"> <div>タブボックス1</div> <div>タブボックス2</div> <div>タブボックス3</div> </div> </div> </body> </html>
補足
ご回答ありがとうございます。 意味合いはあっているかと思いますが、どのように記述すればいいのかがいまいち理解できておりません。 idをclassに変えたりしても変わらないのでご教授いただけないでしょうか?