2016-08-16 2 views
0

jQueryで次のdivにアクティブなクラスを追加して前のdivから削除したり、前のdivからそのdivを削除したりするコードを作成しようとしています。これは私が後で追加したいアニメーションを念頭に置いています。divを変更する前と次のボタン

あなたがHTMLやCSSを使用してコードを見たい場合: http://codepen.io/salman15/pen/kXVmRG?editors=1010

$(document).ready(function() { 
    $('#next').click(function() { 
     var location = $(this).parent().parent(); 
     $('.active').removeClass('active'); 
     $('div').next('#case').addClass('active'); 
    }); 

    $('#prev').click(function() { 
     var location = $(this).parent().parent(); 
     $('.active').removeClass('active'); 
     $(this).prev('#case').removeClass('active'); 
    }); 
}); 
+1

その後、小さいときに前のボタンを無効にするときにNEXTボタンを無効にすることを忘れないでください持っている? –

+0

コードは、アクティブなクラスのコードを次のdivに追加するのではなく、すべてのdivに追加します。前のクラスにクラスを全く追加しません – Salman

+1

あなたのHTMLは無効です - あなたは '#case'と'#tX'要素を何度も繰り返しています。 'id'属性は一意である必要があります –

答えて

3

div要素に同じid値を与えてはいけません。これは無効なHTMLです。代わりに「ケース」classの値として使用してください。

divを見つけて、その要素にaddClassを適用し、あなたがremoveClass方法にちょうどチェーンできアクティブクラスを適用します。

$(document).ready(function(){ 
 
    $('#next').click(function(){ 
 
    if ($('.active').next('.case').length) { 
 
     $('.active').removeClass('active') 
 
        .next('.case') 
 
        .addClass('active'); 
 
    } 
 
    }); 
 
    $('#prev').click(function(){ 
 
    if ($('.active').prev('.case').length) { 
 
     $('.active').removeClass('active') 
 
        .prev('.case') 
 
        .addClass('active'); 
 
    } 
 
    }); 
 
});
.active { background: yellow; border: 1px solid }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="next"> 
 
    <h1>next</h1> 
 
</div> 
 
<div id="prev"> 
 
    <h1>prev</h1> 
 
</div> 
 
<div class="case active">content 1</div> 
 
<div class="case">content 2</div> 
 
<div class="case">content 3</div>

+0

ありがとう、なぜ同じIDを使用するのも悪いですか? – Salman

+0

HTML標準は、それが一意でなければならないと言います。 DOMメソッドは、このルールが真であることを期待しています。このルールを守らないと、予期しない結果が発生します。たとえば、 '$( '#case')'は同じidを持つ要素をもっと与えても、複数の一致を返すことはありません。 – trincot

+0

知識を共有してくれてありがとう! – Salman

2

を@のロリー・mccrossanはコメントで指摘したようにあなたのHTMLとJSは非常に欠陥があります。

ここでは、私がどのように行うのか、本当に簡単な例があります。

$(function() { 
 
    var nextBtn = $("#next"), 
 
     prevBtn = $("#prev"); 
 
    
 
    nextBtn.on('click', function(e) { 
 
     var active = $(".active"); 
 
     var next = active.next('.case'); 
 
     if (next.length) { 
 
      active.removeClass('active'); 
 
      next.addClass('active'); 
 
     } 
 
    }); 
 
    prevBtn.on('click', function(e) { 
 
     var active = $(".active"); 
 
     var prev = active.prev('.case'); 
 
     if (prev.length) { 
 
      active.removeClass('active'); 
 
      prev.addClass('active'); 
 
     } 
 
    }); 
 
});
.active { 
 
    background-color: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul> 
 
    <li class="case active">One</li> 
 
    <li class="case">Two</li> 
 
    <li class="case">Three</li> 
 
    <li class="case">Four</li> 
 
</ul> 
 
<button id="prev">Prev</button> 
 
<button id="next">Next</button>

あなたがリストの最後に到達するとき、それはそれを過ぎて行かないようにnext.lengthprev.lengthチェックがあります。

+0

ありがとうございました! – Salman

1
  1. あなたは例えばDIV-1、DIV-2を変更したいdivをするカスタムクラスを追加します。ここでは

    を簡素化するスニペットです。

  2. アクティブなdivを示すカウンタを追加します。
  3. NEXTまたはPREVをクリックすると、このカウンタがインクリメントまたはデクリメントされ、アクティブなクラスがすべてのdivから削除され、div- {counter}クラスのアイテムに追加されます。
  4. カウンターはあなたが何であるか、問題の詳細を記述してくださいすることができ、あなたのdivの数、その後大きく、カウンタが1
0
$('.ggg').click(function(){ 
    $('.ggg,.sss').removeClass("active"); 
    $(this).addClass("active"); 
    $(this).next(); 
    }); 

var x22 = $("#MainMenu").find(".ggg").length; 
//alert(x22); 

var i = 118; 
    var hrefa2; 
     $(".previous").click(function() { 

     hrefa = $("#MainMenu").find(".ggg").eq(i).attr("alt"); 
     //hrefa3 = $("#MainMenu").find(".ggg").eq(0); 
    i--; 
    //alert(hrefa); 
    $('.ggg').removeClass("active"); 
    $("#MainMenu").find(".ggg").eq(i).addClass("active"); 
}); 

    var i = 0; 
    var hrefa; 
     $(".next").click(function() { 

     hrefa = $("#MainMenu").find(".ggg").eq(i).attr("alt"); 
     //hrefa1 = $("#MainMenu").find(".ggg").eq(0); 
    i++; 
    //alert(hrefa); 
    $('.ggg').removeClass("active"); 
    $("#MainMenu").find(".ggg").eq(i).addClass("active"); 
}); 
+0

あなたの答えを裏付ける説明を加えてください。 –

2
//file 
$(document).ready(function(){ 

    $('.d1 li.s1').click(function(){ 
    $('li').removeClass("active"); 
    $(this).addClass("active"); 
    }); 
    $('ul.ddd li.ggg').click(function(){ 
    $('li').removeClass("active"); 
    $(this).addClass("active"); 
}); 
$(".next").click(function(){ 
i=1 
      var $toHighlight = $('.active').next().length > 0 ? $('.active').next() : $('#MainMenu li.s1').first(); 
      $('.active').removeClass('active'); 
      $toHighlight.addClass('active'); 
      }); 


     $(".previous").click(function(){ 
      var $toHighlight = $('.active').prev().length > 0 ? $('.active').prev() : $('ul.mainmenu1 li.s1').last(); 

      $('.active').removeClass('active'); 
      $toHighlight.addClass('active'); 
     }); 
}); 
関連する問題