2011-09-23 8 views
6

मेरे पास निम्न कोड है, बाएं या दाएं कुंजी घटनाओं पर एक क्लिक अनुकरण।यह निर्धारित करने के लिए कि तत्व जावास्क्रिप्ट/jquery में माता-पिता का अंतिम या पहला बच्चा है या नहीं?

$(document).keydown(function (e) { 
        if(e.keyCode == 37) { // left 
         $(".thumb-selected").prev().trigger('click'); 
        } 
        else if(e.keyCode == 39) { // right 
         $("thumb-selected").next().trigger('click'); 
        } 
       }); 

मूलतः यह अगले या पिछले भाई (दबाया कुंजी के आधार पर) उठाता है और क्लिक करें घटना है कि बदले में गैलरी में उचित छवि प्रदर्शित करेगा फोन: यह एक गैलरी स्लाइड शो के हिस्से के रूप में किया जाता है। ये छवियां सभी एक अनियमित सूची में संग्रहीत हैं।

जहां मैं स्टंप हूं, यह है कि जब पहली या आखिरी छवि का चयन किया जाता है और बाएं या दायां बटन क्लिक किया जाता है (क्रमशः), तो मैं छवियों की सूची के विपरीत छोर पर अगली तस्वीर प्राप्त करना चाहता हूं। उदाहरण के लिए, यदि पहली छवि का चयन किया गया है और बायां तीर दबाया गया है; यह देखते हुए कि कोई पिछली छवि (या ली तत्व) नहीं है, इसे सूची में अंतिम छवि मिल जाएगी। इस तरह चाबियाँ कार्यक्षमता कभी नहीं खोती हैं।

क्या jquery में कोई फ़ंक्शन है जो या तो जांच करेगा कि वर्तमान तत्व अपने माता-पिता का पहला या आखिरी बच्चा है या उसके सूचकांक को इसके माता-पिता के सापेक्ष वापस कर दें ताकि मैं इसकी अनुक्रमणिका को आकार() (बाल गणना) से तुलना कर सकूं) अपने मूल तत्व के?

+0

आप पैरेंट ऑब्जेक्ट क्या प्रथम/अंतिम बच्चे थे पूछने के लिए और वर्तमान तत्व के साथ तुलना सकता है। प्रदर्शन पर कोई विचार नहीं। –

+0

प्रदर्शन एक मुद्दा नहीं है। जो मैंने पढ़ा है उससे दो चयनकर्ता तत्वों (वस्तुओं के रूप में) की तुलना करना असंभव है। मैं आईडी की तुलना करने की कोशिश कर सकता हूं, लेकिन सूची आइटम पर कोई आईडी सेट नहीं है, जो स्क्रिप्ट द्वारा स्वचालित रूप से जेनरेट की जाती है। मैं कम से कम संभव स्क्रिप्ट को संशोधित करने की कोशिश कर रहा हूं। – Prusprus

उत्तर

1
var length = $('#images_container li').length; 
    if(e.keyCode == 37) { // left 
     if($('.thumb-selected').index() > 0) 
       $(".thumb-selected").prev().trigger('click'); 
     else 
       $('.thumb-container').eq(length-1).trigger('click'); 
    } 

    else if(e.keyCode == 39) { // right 
     if($('.thumb-selected').index() < length-1) 
      $("thumb-selected").next().trigger('click'); 
      else 
       $('.thumb-container').eq(0).trigger('click'); 
    } 

.thumb-container की मूल तत्व है सभी अंगूठे कम से कम मुझे आपके कोड से क्या मिला।

एचटीएमएल

<ul class="thumb-container"> 
     <li>thumb</li> 
     <li>thumb</li> 
      . 
      . 
      . 
    </ul> 
+0

हां यह सूची की संरचना है। इंडेक्स() कॉल काम करता प्रतीत होता है। मैं इसे आज़मा दूंगा। – Prusprus

+0

यह बहुत अच्छा काम किया। मेरे कोड में केवल भिन्नता यह है कि जब सूची के दूसरी तरफ ली तत्व को कॉल करते हैं (जब सशर्त विफल हो जाते हैं), तो मेरा चयनकर्ता $ ("। Li .thumb-container li") एक साधारण अंतिम() या पहले होता है() फ़ंक्शन ट्रिगर करने के लिए सही तत्व को इंगित करने के लिए। – Prusprus

2

आप index() का उपयोग कर सकते हैं जो तत्व की अनुक्रमणिका देता है या आप एक और तत्व है या नहीं, यह जांचने के लिए आप पिछला() और अगला() का उपयोग कर सकते हैं।

if(e.keyCode == 37) { // left 
    if($(".thumb-selected").prev().length > 0)){ 
     $(".thumb-selected").prev().trigger('click'); 
    }else{ 
     //no more elements      
     } 
} 
else if(e.keyCode == 39) { // right 
    if($(".thumb-selected").next().length > 0)){ 
     $(".thumb-selected").next().trigger('click'); 
    }else{ 
     //no more elements      
     } 
} 

संपादित करें - मैं कोड है क्योंकि यह अगले उपयोग करने के लिए और अधिक समझ में() और पिछले (बनाता है) nextAll() और prevAll() के बजाय अद्यतन

+0

prevAll() एक अच्छा विचार की तरह लग रहा था, मुझे यकीन नहीं है कि क्यों लंबा() लंबाई प्राप्त करने के लिए बेहतर होगा। भले ही, न तो काम करने लगते हैं (हर समय 0 लौटाता है)। मैं इस समारोह में पढ़ना शुरू कर दूंगा; आपको बताएगा कि मुझे क्या मिल रहा है। – Prusprus

+0

इसका मतलब क्या है कि यह retunrs 0? यहां देखें (http://jsfiddle.net/NkWRK/) या हमें अपना मार्कअप दिखाएं। पिछला() और अगला() बेहतर है क्योंकि मैं सिर्फ एक तत्व को देखता हूं, वे तेज़ हैं –

3

आप परीक्षण करने के लिए is()[docs] विधि का उपयोग कर सकते हैं:

if($(".thumb-selected").is(':first-child')) { 
    // whatever 
} else if($(".thumb-selected").is(':last-child')) { 
    // whatever 
} 
संबंधित मुद्दे

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