2011-01-26 12 views
7

में प्रत्येक nth आइटम प्राप्त करें मेरे पास HTML तत्वों की एक सरणी है। मैं जांच रहा हूं कि सरणी में पिछली वस्तु इस प्रकार मौजूद है:सरणी

var boxes = $('.box'); // creating the array 

boxes.each(function(i){ // going through the array 
    var prevBox = i>0?$(boxes[i-1]):false; // check whether a previous box exists 
    if (prevBox) { } // do something 
    else { } // do something else 
}); 

यह अच्छी तरह से काम करता है। लेकिन मुझे सरणी में प्रत्येक चौथे ऑब्जेक्ट (बॉक्स) के अस्तित्व की जांच करने की आवश्यकता होगी, या अधिक सटीक रूप से एक ऑब्जेक्ट वर्तमान वस्तु से पहले तीन ऑब्जेक्ट मौजूद है या नहीं।

यह काम नहीं करता:

var prevBox = i>0?$(boxes[i-4]):false; 

मैं jQuery.grep() का उपयोग करने और यह पता चल सके (i % 4) == 0 जवाब हो सकता है, लेकिन जावास्क्रिप्ट के अपने सीमित ज्ञान के साथ विश्वास करते हैं, मैं नहीं जानता कि कैसे करने के लिए इसे लागू करने के लिए मैं क्या अब खा लो।

कोई भी मदद कर सकता है? धन्यवाद!

उत्तर

3

आप लूप में modulus operator का उपयोग करके देख सकते हैं कि आप चौथे अंतराल पर हैं या नहीं।

प्रश्न स्पष्ट किया गया था।

var boxes = $('.box'); // creating the array 

boxes.each(function(i){ 
    if(i >= 3) { 
     var prevBox = boxes.eq(i - 3); 
     var pos = prevBox.position(); 
     var top = pos.top; 
    } 
}); 
+0

धन्यवाद पैट्रिक, लेकिन यह काफी नहीं करता जो मैं कर रहा हूं। मुझे ऑब्जेक्ट से 'स्थिति()। शीर्ष' मान प्राप्त करने की आवश्यकता है और इसमें एक और मान जोड़ें। अन्य 'बक्से [3]' में 'बक्से [0] ',' बक्से [6] 'से बक्से [3]', 'बक्से [8]' 'बक्से [5]' से '' मूल्य 'की आवश्यकता होती है। क्षमा करें, मुझे इसे सरल तरीके से समझाते हुए परेशानी हो रही है और इस प्रकार पर्याप्त विशिष्ट नहीं था। – hannu

+0

दूसरे शब्दों में, प्रत्येक पुनरावृत्ति पर मुझे तीन चरणों में वापस जाने की आवश्यकता है, बॉक्स से 'स्थिति()। शीर्ष' मान प्राप्त करें, और इस वर्तमान बॉक्स के लिए एक नए मान की गणना करने के लिए इसका उपयोग करें। – hannu

+0

@ हन्नू: क्या आप कह रहे हैं कि * प्रत्येक * तत्व के लिए, आप चाहते हैं कि उसके पीछे 3 है? उपरोक्त टिप्पणी में आपका नंबरिंग संगत नहीं है। यह 3 से 6 से 8 तक जाता है। वहां कोई पैटर्न नहीं है। – user113716

1

incrementing कदम के रूप में 4 के साथ एक यात्रा का उपयोग करें और नहीं हमेशा की तरह 1.

16

आप न सिर्फ एक पाश के लिए उपयोग कर सकते हैं?

for (var i=0; i< boxes.length; i+=4) 
    { 
    // do stuff with boxes[i] 
    } 

मैं विशेष रूप से JQuery पर बड़ा नहीं हूं, लेकिन नियमित जावास्क्रिप्ट में जो ठीक काम करेगा।

संपादित करें: आप समस्या redescribed गया है कुछ हद तक है, तो आप हर आइटम पर काम करते हैं, लेकिन कुछ चौथे पर विशेष करना चाहता हूँ ...

var previousTop; 
for (var i=0; i< boxes.length; i++) 
    { 
    // do stuff with boxes[i] 
    if (((i+1) % 4) === 0) 
     { 
      previousTop = boxes[i].position.top; 
      // do stuff with the fourth item 
     } 
    } 

यहाँ अधिक मोटे तौर पर scoped previousTop तो किया जा रहा है आप जो कुछ भी करने की ज़रूरत है, उससे पहले हर चौथी वस्तु। फिर जब आप अगले चौथे तत्व तक पहुंचते हैं तो आपके पास अस्थायी चर में पिछले एक का मान होता है, जो कि आप नीचे दिए गए @patrick dw के उत्तर के जवाब से जो कुछ ढूंढ रहे हैं उसके समान लगता है।

+0

धन्यवाद! मैं इसे .each() लूप के अंदर करना चाहता हूं हालांकि मैं इसके अंदर पहले से ही अन्य सामान कर रहा हूं। – hannu

+0

वही करें और एक से बढ़ोतरी करें, फिर अज्ञात फ़ंक्शन के बजाय वहां कोड की कुछ पंक्तियां हों। डीबग करने के लिए अधिक पारदर्शी और आसान है। – glenatron

+0

फिर से धन्यवाद! मेरा मानना ​​है कि यह अभी भी वही मुद्दा है जो @patrick dw का मूल समाधान है। मुझे जो चाहिए वह लूप के प्रत्येक पुनरावृत्ति में तीन चरणों को वापस जाने और वहां से एक मूल्य प्राप्त करने के लिए था, जबकि यह हर चौथा आइटम (0, 3, 6, 9 इत्यादि) प्राप्त करता है। क्षमा करें, बस पर्याप्त विशिष्ट नहीं था! – hannu