質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

1回答

499閲覧

HTMLでのタブ切り替えでdiv要素の内側にdiv要素を入れるとおかしくなる

aiueoaiueoaiue

総合スコア94

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

1クリップ

投稿2018/04/29 15:36

編集2018/04/30 09:15

###実現したい事
参考サイト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が一致していないのが原因っぽいのですが、どう対処すればいいかがわからないです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

(ざっとしか見ていません)下記コードはtabbodyというidのついたdiv要素配下のすべてのdiv要素を取得する仕様ですが、それが問題なのでは。ページごとにクラスを振るとか、そういう取得方法のほうが良いような。

js

1var pages = document.getElementById('tabbody').getElementsByTagName('div');

投稿2018/04/29 15:59

kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aiueoaiueoaiue

2018/04/30 09:06

<div id="tabpage1">を<div class="tabpage1">に変更し、 var pages = document.getElementById('tabbody').getElementsByTagName('div');を var pages = document.getElementById('tabbody').getElementsByClassName('tabpage1');にして、 if( pages[i].id != targetid ) {の部分をif( pages[i].class != targetid ) {にしてみましたが、変化はありませんでした。
kei344

2018/04/30 09:23

> <div id="tabpage1">を<div class="tabpage1">に変更し、 targetid の取得方法から変わるのでその変え方はお勧めしません。 たとえば、<div id="tabpage1"> を <div id="tabpage1" class="tabpage"> にすれば、必要な div要素だけ取得することが出来ますよね。 あと、pages[i].class というプロパティは無いですよ。
aiueoaiueoaiue

2018/04/30 09:38 編集

すみません、今ちょうどtabpage1のグループをクラス化して解決しました。ありがとうございました。 <div id="tabpage1">の一行上に<div class="classname"を追加、</div>を下の方に追加して var pages = document.getElementById('tabbody').getElementsByClassName('classname');という修正をしました。 <div class="classname" の部分は<div class="classname">としてしまうと上手く表示されなかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問