2010-11-24 10 views
8

मैं कुछ कक्षा के साथ एक तत्व के लिए एक क्लिक घटना का उपयोग करता हूं। क्लिक इवेंट फ़ंक्शन के अंदर मुझे उसी कक्षा के साथ पृष्ठ पर अगला तत्व प्राप्त करने की आवश्यकता है। मैंने कोशिश की:उसी कक्षा के साथ अगला तत्व प्राप्त करें

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

और:

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

.class किसी तालिका में टीडी के अंदर एक div है, तो इस कारण तीन बार माता-पिता()।

<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 पोस्ट कर सकते हैं? –

+0

आपका दृष्टिकोण क्यों काम नहीं कर रहा है? –

+0

@ लुका: क्योंकि 'अगला()' इस तरह से काम नहीं करता है। यह केवल * अगले भाई * ** iff ** देता है यह दिए गए चयनकर्ता से मेल खाता है। –

उत्तर

3

आप कोशिश कर सकते हैं:

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

इसके लिए धन्यवाद। इस पंक्ति का थोड़ा साफ संस्करण: 'var $ next = draggables.eq (draggables.index (यह));' –

5

कैसे इस बारे में:

मेरे एचटीएमएल (.class .drag है) कुछ इस तरह है? हालांकि आपको एक-एक-एक त्रुटियों की जांच करनी चाहिए, क्योंकि मैंने इसका परीक्षण नहीं किया है।

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

यह काम नहीं करता है। –

+0

@ रिचर्ड, मेरा संपादन देखें। यह अब काम करता है। –

+1

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

1

आप slice() के संयोजन का उपयोग कर सकते हैं और each():

var elements = $('.class'); 

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

DEMO

वैकल्पिक रूप से (हालांकि शायद कम कुशल) आम पूर्वज के लिए एक संदर्भ हो और slice() उपयोग करने के लिए किया जाएगा और index():

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

यह काम नहीं करता है। –

+0

@ रिचर्ड: परिभाषित * काम नहीं करता *। डेमो काम करता है जैसा मुझे लगता है। –

+0

ठीक है, जब मैं अपने एचटीएमएल पर अपना कोड इस्तेमाल करता हूं तो $ अगला अपरिभाषित था। –

संबंधित मुद्दे