###実現したい事
参考サイト1と参考サイト2を見てタブ切り替えを実現したかったのですが、タブの切り替え自体はいいのですが、タブの中身が表示されません。<h1></h1>で囲まれた部分しか表示されず、それ以外が全く表示されないという状態です。私の考えではタブ1ではピアノの鍵盤が出て、タブ2が白紙のはずなのですが、タブ1のピアノが出ないのです。解決策ご存知の方回答お願いします。
###ソース
<html> <head> <meta charset="utf-8"> <title>TM Piano</title> <style> .piano { position:relative; height:200px; margin: 20px; } .white-key-set { position:absolute; left:0px; display:-webkit-box; display:-moz-box; display: box; } .white-key-set .keyboard { display:-moz-box; width:40px; height:200px; border:solid 1px black; background-color: #eee; } .black-key-set { display:-webkit-box; display:-moz-box; display: box; position:absolute; top: 1px; left: 25px; } .black-key-set .keyboard { display:-moz-box; width:30px; height:120px; border:solid 1px white; margin-right: 10px; background-color: #000; } /* ▼タブ */ #tabcontrol a { display: inline-block; /* インラインブロック化 */ border-width: 1px 1px 0px 1px; /* 下以外の枠線を引く */ border-style: solid; /* 枠線の種類:実線 */ border-color: black; /* 枠線の色:黒色 */ border-radius: 0.75em 0.75em 0 0; /* 枠線の左上角と右上角だけを丸く */ padding: 0.75em 1em; /* 内側の余白 */ text-decoration: none; /* リンクの下線を消す */ color: black; /* 文字色:黒色 */ background-color: white; /* 背景色:白色 */ font-weight: bold; /* 太字 */ position: relative; /* JavaScriptでz-indexを調整するために必要 */ } /* ▼タブにマウスポインタが載った際(任意) */ #tabcontrol a:hover { text-decoration: underline; /* 文字に下線を引く */ } /* ▼タブの中身 */ #tabbody div { /* 枠線:黒色の実線を1pxの太さで引く */ margin-top: -1px; /* 上側にあるタブと1pxだけ重ねるために「-1px」を指定 */ z-index: 0; /* 重なり順序を「最も背面」にするため */ } </style> </head> <body> <p id="tabcontrol"> <a href="#tabpage1">タブ1</a> <a href="#tabpage2">タブ2</a> </p> <div id="tabbody"> <div id="tabpage1"> <h1>TM Piano</h1> <div class="piano"> <div class="white-key-set"> <div class="keyboard" name="C3"></div> <div class="keyboard" name="D3"></div> <div class="keyboard" name="E3"></div> <div class="keyboard" name="F3"></div> <div class="keyboard" name="G3"></div> <div class="keyboard" name="A3"></div> <div class="keyboard" name="B3"></div> <div class="keyboard" name="C4"></div> </div> <div class="black-key-set"> <div class="keyboard" name="pC3"></div> <div class="keyboard" name="pD3"></div> <div class="keyboard" name="nameless" style="visibility:hidden;"></div> <div class="keyboard" name="pF3"></div> <div class="keyboard" name="pG3"></div> <div class="keyboard" name="pA3"></div> </div> </div> </div> </div> <script type="text/javascript"> // --------------------------- // ▼A:対象要素を得る // --------------------------- var tabs = document.getElementById('tabcontrol').getElementsByTagName('a'); var pages = document.getElementById('tabbody').getElementsByTagName('div'); // --------------------------- // ▼B:タブの切り替え処理 // --------------------------- function changeTab() { // ▼B-1. href属性値から対象のid名を抜き出す var targetid = this.href.substring(this.href.indexOf('#')+1,this.href.length); // ▼B-2. 指定のタブページだけを表示する for(var i=0; i<pages.length; i++) { if( pages[i].id != targetid ) { pages[i].style.display = "none"; } else { pages[i].style.display = "block"; } } // ▼B-3. クリックされたタブを前面に表示する for(var i=0; i<tabs.length; i++) { tabs[i].style.zIndex = "0"; } this.style.zIndex = "10"; // ▼B-4. ページ遷移しないようにfalseを返す return false; } // --------------------------- // ▼C:すべてのタブに対して、クリック時にchangeTab関数が実行されるよう指定する // --------------------------- for(var i=0; i<tabs.length; i++) { tabs[i].onclick = changeTab; } // --------------------------- // ▼D:最初は先頭のタブを選択しておく // --------------------------- tabs[0].onclick(); </script> </body> </html>
###試したこと
id=tabbage1をclass=tabpage1に変更してclassを取得しようとしてみましたが、ダメでした。
if文のnoneとblockを入れ替えてみるとタブ2の方には歪なピアノが表示されました。タブ1は白紙でした。pages[i].idとtargetidが一致していないのが原因っぽいのですが、どう対処すればいいかがわからないです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/04/30 09:06
2018/04/30 09:23
2018/04/30 09:38 編集