2010-11-24 22 views
8

Belirli bir sınıfa sahip bir öğe için bir tıklama olayı kullanıyorum. Tıklama etkinliği işlevinin içinde, sayfada bir sonraki öğeyi aynı sınıfa götürmem gerekiyor. Denedim:Aynı öğeye sahip sonraki öğeyi al

$('.class').click(function() { 
    var $next = $(this).next('.class') 
}); 

Ve:

$('.class').click(function() { 
    var $next = $(this).parent().parent().parent().next('.class') 
}); 

.class tablodaki td içinde bir div olduğunu, işte bu yüzden üç kez parent(). Bu nasıl hakkında

<table cellspacing="0" cellpadding="0" border="0" class="black8"> 
<tr class="trow1 drop trow1_over" 
    rel="0,1"> 
    <td> 
      <div class="drop rootFolder" 
       rel="0,1"></div> 
    </td> 
    <td width="100%" 
     class="folderListOnclick"> 

      <span>.. (koreňový adresár)</span> 
    </td> 
    <td> 
    </td> 
    <td> 
    </td> 
</tr><tr class="trow1"> 
    <td> 
     <div class="drag drop ordinaryFolder" 
      rel="1,1" 
      style="width: 40px;"> 

     </div> 
    </td> 
    <td width="100%" 
     class="folderListOnclick" 
     rel="1"> 
      <span>aaa</span> 
    </td> 
    <td> 
     <div class="button_mini folderEditOnclick" 
      rel="1"> 
        <span></span> 

     </div> 
    </td> 
    <td> 
     <div class="button_mini folderDeleteOnclick" 
      rel="1"> 
        <span><span> 
     </div> 
    </td> 
</tr><tr class="trow1"> 
    <td> 

     <div class="drag drop ordinaryFolder" 
      rel="19,1" 
      style="width: 50px;"> 
     </div> 
    </td> 
    <td width="100%" 
     class="folderListOnclick" 
     rel="19"> 
      <span>subaaa</span> 
    </td> 
    <td> 
     <div class="button_mini folderEditOnclick" 
      rel="19"> 

        <span></span> 
     </div> 
    </td> 
    <td> 
     <div class="button_mini folderDeleteOnclick" 
      rel="19"> 
        <span><span> 
     </div> 
    </td> 
</tr> 
</table> 
+0

HTML'yi gönderebilir misiniz? –

+0

Neden yaklaşımınız çalışmıyor? –

+0

@Luca: Çünkü 'next()' bu şekilde çalışmıyor. Sadece bir sonraki kardeş * * iff ** değerini döndürür. –

cevap

3

Şunları yapabilirsiniz:

$(".drag").click(function() { 
    var draggables = $(this).parents("table").find(".drag"); 
    var $next = draggables.filter(":gt(" + draggables.index(this) + ")").first(); 
}); 
+0

Bunun için teşekkürler. Bu satırın biraz daha temiz sürümü: 'var $ next = draggables.eq (draggables.index (this));' –

5

:

Benim HTML böyle bir şey (.class .drag olan) nedir? Yine de, bire bir hataları kontrol etmelisiniz, çünkü test etmedim.

$('.class').click(function() { 
    var index = $('.class').index($(this)); 
    var $next = $('.class').slice(index+1,index+2); 
    ... 
}); 
Sen slice() bir arada kullanabilirsiniz
+0

Bu işe yaramıyor. –

+0

@Richard, düzenlememe bakın. Şuan çalışıyor. –

+1

http://jsfiddle.net/5QdgB/ –

1

ve each():

var elements = $('.class'); 

elements.each(function(index, element) { 
    $(this).click(function() { 
     var $next = elements.slice(index+1, index+2); 
    }); 
}); 
Alternatif

DEMO

(belki daha az verimli olsa da) ortak atasının bir başvuru alma ve slice() kullanmak olacaktır ve index():

$('.class').click(function() { 
    var elements = $(this).closest('table').find('.class'); 
    var index = elements.index(this); 
    $next = elements.slice(index + 1, index + 2); 
}); 
+0

Bu işe yaramıyor. –

+0

@Richard: Tanımla * çalışmıyor *. Demo, bence gerektiği gibi çalışıyor. –

+0

Kodunuzu HTML'imde kullandığımda, sıradaki $ undefined oldu. –

İlgili konular