jQueryで以下のように記述したのですが、main.js内のif文の記述がうまくいかずconsoleでうまくタブそれぞれの内容が表示されません。
HTML <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>JavaScript Test</title> <link rel="stylesheet" href="main.css"> </head> <body> <div class="tabs-menu"> <div id="tab-menu-a">タブa</div> <div id="tab-menu-b">タブb</div> <div id="tab-menu-c">タブc</div> </div> <div class="tabs-content"> <div id="tabs-a"> <p>タブaの内容が入ります。</p> </div> <div id="tabs-b"> <p>タブbの内容が入ります。</p> </div> <div id="tabs-c"> <p>タブcの内容が入ります。</p> </div> </div> <!-- jQuery --> <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> <script src="main.js"></script> </body> </html>
CSS
/* ページ全体での文字色の設定 */ body { color: #3f4548; } /* divのデフォルトスタイルを消去 */ .tabs-menu { margin: 0; padding: 0; } /* タブの基本スタイル */ .tabs-menu div { display: block; float: left; padding: 10px 20px; margin-right: 8px; margin-bottom: -1px; border-style: solid; border-width: 1px; border-color: transparent; border-radius: 4px 4px 0 0; color: #557f95; text-decoration: none; cursor: pointer; /* 各プロパティをふわっと変える演出 */ transition: all 0.15s; } /* 非選択のタブにマウスカーソルを乗せたら色を変える(追記してください) */ .tabs-menu div:not(.active):hover { border-color: #f0f0f0 #f0f0f0 #999; background-color: #f0f0f0; } /* 選択中のタブ */ .tabs-menu .active { color: #3f4548; border-color: #999 #999 transparent #999; background-color: #fff; } /* タブコンテンツ表示エリア */ .tabs-content { clear: both; border: 1px solid #999; border-radius: 0 4px 4px 4px; padding: 10px; } /* 各タブのコンテンツはデフォルトで非表示 */ .tabs-content > div { display: none; }
main.js
const showTab = (selector) => { // 引数selectorの中身をコンソールで確認する console.log(selector); $(".tabs-menu > div").removeClass("active"); $(".tabs-content > div").hide(); $(`.tabs-menu div[id="${selector}"]`) .addClass('active'); if (selector === "tab-menu-a") { $("tabs-a").show(); } else if (selector === "tab-menu-b") { $("tabs-b").show(); } else if (selector === "tab-menu-c") { $("tab-c").show(); } $(selector).show(); }; // タブがクリックされたらコンテンツを表示 $(".tabs-menu div").on("click", (e) => { const selector = $(e.target).attr('id'); showTab(selector); }); // 初期状態として1番目のタブを表示 showTab('#tab-menu-a');
*main.jsを以下のように変更したらうまくいったのですが、ほかにif文を使って表示する方法はありますか??
const showTab = (selector) => { // 引数selectorの中身をコンソールで確認する console.log(selector); $(".tabs-menu > div").removeClass("active"); $(".tabs-content > div").hide(); $(`.tabs-menu div[id="${selector}"]`) .addClass('active'); let tabs = ""; if (selector === "tab-menu-a") { tabs = "tabs-a"; } else if (selector === "tab-menu-b") { tabs = "tabs-b"; } else if (selector === "tab-menu-c") { tabs = "tabs-c"; } $("#" + tabs).show(); }; // タブがクリックされたらコンテンツを表示 $(".tabs-menu div").on("click", (e) => { const selector = $(e.target).attr('id'); showTab(selector); });
折角法則があるんですから、if使わない方法考えた方がいいですね。
タブ増えたらどうします?
お返事ありがとうございます!たくさんあったらいちいtif文書くの大変ですね!
あと、法則とはなんでしょうか?
よろしくお願いいたします。
tab-menu-a→tabs-a
tab-menu-b→tabs-b
変わってるのはa,bのみ。
これを「法則」というか、「規則性」と言った方がいいですね。
「その部分だけ動的に変わる」という規則性がある。
一般的なプラグインはそのあたりを吸収するように作られています。
もちろんその規則性を守らせるための実装ルールがあるのですけど。
なるほどですね!
例えば、sliceとかですか?
「例えば」が何を意図してsliceを持ってこられたのか分かりません。
回答2件
あなたの回答
tips
プレビュー