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

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

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

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

6回答

509閲覧

【冗長なコードを簡略するコツを教えてください!】jQueryでタブ切替を実装中

yuyuuyu

総合スコア7

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

1クリップ

投稿2017/10/19 15:04

編集2017/10/19 15:17

###前提・実現したいこと
プログラミング初心者です!
JSコードを簡略化させたい。
また簡略化するコツがあればおしえていただけると幸いです!

###現在の状況
jQuery を使用して4つのタブ切り替えを行います。
タブを切り替えるごとにhoge0〜3のhtml要素が表示、非表示になる実装です。

###該当のソースコード

$(function(){ $('.js-hoge > li > a:eq(0)').on('click',function(){ $('.js-hoge0').fadeIn(); $('.hoge1, .hoge2, .hoge3').fadeOut(); }); $('.js-hoge > li > a:eq(1)').on('click',function(){ $('.hoge1').fadeIn(); $('.hoge0, .hoge2, .hoge3').fadeOut(); }); $('.js-hoge > li > a:eq(2)').on('click',function(){ $('.hoge2').fadeIn(); $('.hoge1, .hoge0, .hoge3').fadeOut(); }); $('.js-hoge > li > a:eq(3)').on('click',function(){ $('.hoge3').fadeIn(); $('.hoge0, .hoge1, .hoge2').fadeOut(); }); });

html

    <nav class="mainMenu"> <ul class="clearfix js-hoge"> <li><a href="javascript:void(0)" </a>要素1</li> <li><a href="javascript:void(0)"</a>要素2</li> <li><a href="javascript:void(0)"</a>要素3</li> <li><a href="javascript:void(0)" </a>要素4</li> </ul> </nav> <div class="hoge0">要素1</div> <div class="hoge1">要素2</div> <div class="hoge2">要素3</div> <div class="hoge3">要素4</div>

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

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

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

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

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

s8_chu

2017/10/19 15:08

HTMLを追記していただけませんか?
yuyuuyu

2017/10/19 15:17

ありがとうございます!htmlを追記いたしました。
guest

回答6

0

aタグの開始タグが終わっていないことと、終了タグがないことを修正したうえで、以下のように行うことができると思います。

HTML

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <title>タイトル</title> 6</head> 7<body> 8<nav class="mainMenu"> 9 <ul class="clearfix js-hoge"> 10 <li><a href="javascript:void(0)">要素1</a></li> 11 <li><a href="javascript:void(0)">要素2</a></li> 12 <li><a href="javascript:void(0)">要素3</a></li> 13 <li><a href="javascript:void(0)">要素4</a></li> 14 </ul> 15</nav> 16<div class="hoge0">要素1</div> 17<div class="hoge1">要素2</div> 18<div class="hoge2">要素3</div> 19<div class="hoge3">要素4</div> 20<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script> 21<script> 22 $(function () { 23 $(".js-hoge > li > a").on("click", function () { 24 var i = $(".js-hoge > li").index($(this).parent()); 25 $(".hoge" + i).fadeIn(); 26 $("body div:not(.hoge" + i + ")").fadeOut(); 27 }); 28 }); 29</script> 30</body> 31</html>

投稿2017/10/19 15:43

編集2017/10/19 15:52
s8_chu

総合スコア14731

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

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

0

$('.js-hoge > li > a:eq(3)')

このようなDOMへのアクセスはできますが、多用すると動作が遅くなる傾向にあるので注意が必要です。
最も負荷が少なく早いのはidによるアクセスです。

classとidをうまく使い分けることで以下のようなシンプルなコードが書けると思います。

html

1<nav class="mainMenu"> 2 <ul class="clearfix js-hoge"> 3 <li><a href="#tab1" class="menu">要素1</a></li> 4 <li><a href="#tab2" class="menu">要素2</a></li> 5 <li><a href="#tab3" class="menu">要素3</a></li> 6 <li><a href="#tab4" class="menu">要素4</a></li> 7 </ul> 8</nav> 9<div id="tab1" class="tab">要素1</div> 10<div id="tab2" class="tab">要素2</div> 11<div id="tab3" class="tab">要素3</div> 12<div id="tab4" class="tab">要素4</div>

css

1.tab{ 2 display: none;/*すべて非表示*/ 3} 4#tab1{ 5 display:block; /*最初のタブは表示とする(上書き)*/ 6}

javascript

1$(function(){ 2 // メニュークラスクリックのイベント登録 3 $('.menu').on('click', function(){ 4 $('.tab').hide(); // tab class をすべて非表示 5 var id = $(this).attr('href'); // クリックしたDOMのhref要素を取得 6 $(id).show(); // hrefの内容がidと一致するものを表示 7 }) 8})

投稿2017/10/19 15:41

cookieman

総合スコア128

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

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

0

idやclassを利用せずに処理したいならdata-*でしょうね

javascript

1$(function(){ 2 $('a[data-target]').on('click',function(){ 3 $('[data-self]').hide().filter('[data-self="'+$(this).data('target')+'"]').show(); 4 }); 5});

HTML

1<nav class="mainMenu"> 2<ul class="clearfix js-hoge"> 3<li><a href="#" data-target="hoge0">要素1</a></li> 4<li><a href="#" data-target="hoge1">要素2</a></li> 5<li><a href="#" data-target="hoge2">要素3</a></li> 6<li><a href="#" data-target="hoge3">要素4</a></li> 7</ul> 8</nav> 9<div data-self="hoge0">要素1</div> 10<div data-self="hoge1" style="display:none">要素2</div> 11<div data-self="hoge2" style="display:none">要素3</div> 12<div data-self="hoge3" style="display:none">要素4</div>

投稿2017/10/20 00:40

yambejp

総合スコア114769

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

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

0

ベストアンサー

デザイナー側の問題でHTMLが触れない、などの制約があれば、こんな方法もあります。
一番シンプルなやつですね。

javascript

1function fadeInOutAct(target, fadein, fadeout) { 2 target.on('click', function () { 3 fadein.fadeIn(); 4 fadeout.fadeOut(); 5 }); 6} 7 8$(function () { 9 fadeInOutAct('.js-hoge > li > a:eq(0)', 10 '.js-hoge0', 11 '.hoge1, .hoge2, .hoge3') 12 fadeInOutAct('.js-hoge > li > a:eq(1)', 13 '.js-hoge1', 14 '.hoge0, .hoge2, .hoge3') 15 fadeInOutAct('.js-hoge > li > a:eq(2)', 16 '.js-hoge2', 17 '.hoge1, .hoge0, .hoge3') 18 fadeInOutAct('.js-hoge > li > a:eq(3)', 19 '.js-hoge3', 20 '.hoge0, .hoge1, .hoge2') 21});

投稿2017/10/21 03:47

KONDO-Yuuki

総合スコア18

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

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

0

ネストがちょっと深くなっちゃったけど、
こんなアプローチはどうかな?

JavaScript

1$(function(){ 2 [0, 1, 2, 3].forEach(function(it){ 3 $('.js-hoge > li > a:eq(' + it + ')').on('click',function(){ 4 $('.js-hoge' + it).fadeIn(); 5 var targets = [0, 1, 2, 3] 6 .filter(function(target){return it !== target;}) 7 .map(function(target){return '.hoge' + target;}) 8 .join(', '); 9 $(targets).fadeOut(); 10 }); 11 }); 12});

投稿2017/10/19 15:33

編集2017/10/19 15:35
miyabi-sun

総合スコア21158

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

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

0

みなさま、ありがとうございました。

初心者なものでいろろ勉強させていただきました!

投稿2017/10/21 04:06

yuyuuyu

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問