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

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

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

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

Q&A

解決済

2回答

3476閲覧

同じような処理を配列でまとめるには

natsuhayate8

総合スコア13

jQuery

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

0グッド

0クリップ

投稿2016/04/28 06:43

編集2016/04/28 07:28

以下のようなコードを配列でまとめたいと思い、
まとめる前は上手くいったのですが、まとめると上手くいきませんでした。

【まとめる前のコード】

javascript

1$('#btnTabA').click(function(){ 2 $(this).css('background','#ef857d'); 3 $('#btnTab > div').not(this).css('background','#7bcad1'); 4 $('#btnA').css('z-index','1'); 5 $('#btnInner > div').not('#btnA').css('z-index','0'); 6}); 7$('#btnTabB').click(function(){ 8 $(this).css('background','#ef857d'); 9 $('#btnTab > div').not(this).css('background','#7bcad1'); 10 $('#btnB').css('z-index','1'); 11 $('#btnInner > div').not('#btnB').css('z-index','0'); 12}); 13$('#btnTabC').click(function(){ 14 $(this).css('background','#ef857d'); 15 $('#btnTab > div').not(this).css('background','#7bcad1'); 16 $('#btnC').css('z-index','1'); 17 $('#btnInner > div').not('#btnC').css('z-index','0'); 18});

【まとめた後のコード】

Javascript

1var btn = ['#btnA', '#btnB', '#btnC'], 2btnTab = ['#btnTabA', '#btnTabB', '#btnTabC'], 3btnLen = btn.length; 4 5for(var i = 0; i > btnLen; i++){ 6$(btnTab[i]).click(function(){ 7 $(this).css('background','#ef857d'); 8 $('#btnTab > div').not(this).css('background','#7bcad1'); 9 $(btn[i]).css('z-index','1'); 10 $('#btnInner > div').not(btn[i]).css('z-index','0'); 11});

まとめた場合の結果としては、なにかしらのbtnTabをクリックするとbtnTabCのzIndexが1になり、
それ以降はどこをクリックしても変わらない状態です。

どなたか分かる方がいましたら教えていただけたら幸いです。

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

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

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

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

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

kei344

2016/04/28 06:54

コードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「</>」ボタンを押すとコードブロックになります。
natsuhayate8

2016/05/01 08:13

修正しました、ご指摘ありがとうございます!
guest

回答2

0

同じような構造の繰り返し、ということで配列で解決する、という方向で考えられたと思いますが、JavaScript 内のコードの構造(配列)で解決するより、HTML の構造を利用する方がすっきりするかもしれません。

示していただいたコードからは HTML がどのようになっているかわからない点も多いですが、おそらく、次のようになっているものと思います。

html

1<div id="btnTab"> 2 <div id="btnTabA">TabA</div> 3 <div id="btnTabB">TabB</div> 4 <div id="btnTabC">TabC</div> 5</div> 6<div id="btnInner"> 7 <div id="btnA">A</div> 8 <div id="btnB">B</div> 9 <div id="btnC">C</div> 10</div>

もし、このようになっているのであれば、対応する tab と btn を id で識別することによって、次のように書くこともできます。

javascript

1$(function() { 2 var $tabContainer = $('#btnTab'); 3 var $btnContainer = $('#btnInner'); 4 $tabContainer.children('div').each(function() { 5 var $tab = $(this); 6 var id = $tab.attr('id'); 7 var btnId = 'btn' + id.substr(6); 8 var $btn = $('#' + btnId); 9 $tab.on('click', function() { 10 $tab.css('background','#ef857d'); 11 $tabContainer.children(':not("#' + id + '")').css('background','#7bcad1'); 12 $btn.css('z-index','1'); 13 $btnContainer.children(':not("#' + btnId + '")').css('z-index','0'); 14 }); 15 }); 16});

id を文字列操作で作るのが気持ち悪いと思うのであれば、data-* カスタム属性を tab と btn 双方につけて、それで対応をつけるというのでもよいと思います。

投稿2016/04/28 07:42

unau

総合スコア2468

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

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

natsuhayate8

2016/05/01 08:13

私の発想にはない書き方だったので、非常に参考になりました! HTMLの構造を利用するという意識にも目を向けていきたいと思います。
guest

0

ベストアンサー

類似の質問でこんなのもあります。
https://teratail.com/questions/33540

回避策はいろいろありますが、一例を。

javascript

1var onclickFunc = function(a){ 2 return function(){ 3 $(btnTab[a]).css('background','#ef857d'); 4 $('#btnTab > div').not(btnTab[a]).css('background','#7bcad1'); 5 $(btn[a]).css('z-index','1'); 6 $('#btnInner > div').not(btn[a]).css('z-index','0'); 7 }; 8}; 9for(var i = 0; i > btnLen; i++){ 10 $(btnTab[i]).click(onclickFunc(i)); 11} 12

投稿2016/04/28 07:01

tkturbo

総合スコア5572

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

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

natsuhayate8

2016/05/01 08:08

tkturbo様の解答と類似の質問を見て問題が解決しました! $(btnTab[i]).click(onclickFunc(i));の外側に無名関数を定義することで、実行できました。 どうもありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問