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

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

ただいまの
回答率

90.62%

  • HTML

    8635questions

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

  • jQuery

    6522questions

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

  • CSS

    5560questions

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

jQueryをクリックをイベントとした要素の表示非表示の連動について

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 750

junagame

score 2

前提・実現したいこと

jQueryを使ったクリック時のタブの表示の切り替えと別の要素の表示・非表示を連動させたい

実現したいことが分かりにくいとのご指摘をいただきましたので
もうすこし具体的な内容を追記いたします。

【追記】
http://www.ofuta.me/jquery/408
上記の記事を参考に
1ページ内に複数のタブの切り替えがある場合のタブメニューを作成しました。
タブの切り替え自体は上記の記事を参考に設定できたのですが、
クリックのイベントに連動して他の要素にクラス付与とクラス削除をしたいと思ったときに
うまく動作してくれない状況です。

【前提】

ページの読み込み時は
<a class="mondai_pdf dl_active" href="#">PDF</a>と
<div class="mondai active"><p>tab_btn1</p></div>と
<div class="tabConte mondai" style="display:block;">が表示されている状態
※active、dl_activeにはdisplay:block;が指定してあります。
 タブメニューはページ内に複数設置してあります。

【実現したいこと】
tab_btnの子要素のクリックをイベントとして
tab_btnの子要素にactiveというクラスの付与・削除をしたい
pdf_btnの子要素とtabConteの子要素の表示・非表示を連動させたい
(クラスの付与、jqueryによるコントロールどちらでも大丈夫です)

発生している問題・エラーメッセージ

当方jQueryやjavascriptにあまり詳しくありません。
実装する際はそれっぽい記事を探して必要な部分を修正して対応する程度の知識量です。
今回の質問はクリックによるタブの表示切り替えはうまくいったのですが、
連動して他の要素の表示・非表示を切り替えたいと思った際にうまくいきません。
chromeの検証画面のコンソールではエラーが出ていないのでプログラム自体が
うまく書けていないんだと思います。

該当のソースコード

【HTML】
    <section class="sp_tb_menu">
      <div class="ttlBox">
      <h2>テスト</h2>
      <span class="pdf_btn">
        <a class="mondai_pdf" href="#">PDF</a>
        <a class="kaitou_pdf" href="#">PDF</a>
      </span>
      </div>
        <div class="tab_btn">
          <div class="mondai active"><p>tab_btn1</p></div>
          <div class="kaitou"><p>tab_btn2</p></div>
          <a href="#">outer_link</a>
        </div>
        <div class="tabBox">
        <div class="tabConte mondai" style="display:block;">
            <ul class="mod-button-link">
              <li><a href="#"></a></li>
              <li><a href="#"></a></li>
            </ul>
          </div>
          <div class="tabConte kaitou">
            <ul class="mod-button-link">
              <li><a href="#"></a></li>
              <li><a href="#"></a></li>
            </ul>
          </div>
          </div>
      </section>

【jQery】
$(function() {
  $('.tab_btn div:nth-child(1)').addClass('active');
  $('.pdf_btn a:nth-child(1)').addClass('dl_active');
  $('.tab_btn div').on('click',function() {
    var num = $(this).parent().children('div').index(this);
    $(this).parent('.tab_btn').each(function(){
      $('div',this).removeClass('active').eq(num).addClass('active');
    });
    $(this).parent().next().children('.tabConte').hide().eq(num).show();
  }).first().click();
});
※cssのactive、dl_activeというクラスにdisplay: block;をあてています。
上記のHTMLとjQueryでタブの表示の切り替えはうまくいっています。

試したこと

独学なもので色々な記事を参考にjQueryを書き換えてみたのですがうまくいっていない状態です。

補足情報(言語/FW/ツール等のバージョンなど)

HTML、CSS、jQuery

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • rnosh

    2017/09/28 13:28

    実現したいことの記載が少々わかりにくいです。「表示・非表示の連動」では、どういう時に何を表示にして何を非表示にしたいのかなどがわからないので、正確な回答を得るには、もう少し詳述したほうがいいと思います。

    キャンセル

  • kei344

    2017/09/28 13:50

    コードブロックにはコード/エラーのみを入れるようにしてください。文章はコードブロック外にあるほうが読みやすいです。

    キャンセル

回答 3

checkベストアンサー

0

ちょっとごちゃごちゃしていて状況がわからないのですが
こんな感じでしょうか?

.dl_active{color:aqua;}
.active{color:lime;}
$(function() {
  $('.pdf_btn a:first').addClass('dl_active');
  $('.tabconte').hide().eq(0).show();
  $('.tab_btn div').on('click',function(){
    var idx=$('.tab_btn div').index($(this));
    $(this).addClass('active').siblings().removeClass('active');
    $('.pdf_btn a').removeClass('dl_active').eq(idx).addClass('dl_active');
    $('.tabconte').hide().eq(idx).show();
  }).eq(0).addClass('active');
});

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/28 14:23

    早速のご回答誠にありがとうございます。
    私の説明が下手で余計なお手間を取らせてしまい申し訳ございませんでした。
    ご教示いただいたコードをもとに調整してみます。

    キャンセル

0

質問内容と求めている結果と状況が謎謎ですが、表示を切り替えるだけなら下記でも可能です。
もし、表示切替する要素が動的に追加された要素なら$(document).on('click')を使わないと切り替えされないかと。

$(function() {
  /* 初期表示 */
  $('.pdf_btn a').hide().eq(0).toggle();
  $('.tabconte').hide().eq(0).toggle();
  /* 表示切替 */
  $('.tab_btn div').on('click',function(){
    var idx=$(this).index();
    $('.pdf_btn a').hide().eq(idx).toggle();
    $('.tabconte').hide().eq(idx).toggle();
  });
});
<section class="sp_tb_menu">
<div class="ttlBox">
<h2>テスト</h2>
<span class="pdf_btn">
<a class="mondai_pdf" href="#">PDF-1</a>
<a class="kaitou_pdf" href="#">PDF-2</a>
</span>
</div>
<div class="tab_btn">
<div class="mondai active"><p>tab_btn1</p></div>
<div class="kaitou"><p>tab_btn2</p></div>
<a href="#">outer_link</a>
</div>
<div class="tabBox">
<div class="tabConte mondai">
<ul class="mod-button-link">
<li><a href="#">1-Ⅰ</a></li>
<li><a href="#">1-Ⅱ</a></li>
</ul>
</div>
<div class="tabConte kaitou">
<ul class="mod-button-link">
<li><a href="#">2-Ⅰ</a></li>
<li><a href="#">2-Ⅱ</a></li>
</ul>
</div>
</div>
</section>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/28 16:52

    私の説明が下手で余計なお手間を取らせて申し訳ございません。
    ご教示頂いたコードをもとに調整をしてみます。

    ありがとうございました。

    キャンセル

0

yambejp様、NIA様に教えていただいた情報をもとに何度か調整してみたところ
うまくいきました。

お二人様とも誠にありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.62%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • HTML

    8635questions

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

  • jQuery

    6522questions

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

  • CSS

    5560questions

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