2012-12-29 19 views
5

के लिए मेरे पास एक ही कक्षा के साथ बहुत सारे तत्व हैं। इन तत्वों विशेषता का "डेटा-xxx" माध्यम से समूहों में विभाजित हैंकक्षा के लिए प्रत्येक को चलाएं लेकिन एक बार समूह

<div class="myclass" data-n="group1"></div> 
<div class="myclass" data-n="group1"></div> 
<div class="myclass" data-n="group1"></div> 
.... 
<div class="myclass" data-n="group2"></div> 
<div class="myclass" data-n="group2"></div> 
... 
<div class="myclass" data-n="group3"></div> 
... 
... 

कैसे एक समारोह प्रत्येक आइटम पर कुछ इस तरह का उपयोग कर प्रत्येक समूह में प्रदर्शन करने के लिए, लेकिन केवल एक बार?

$('.myclass').each(function(){ 

/// My function 

}); 
+0

मुझे नहीं लगता कि jquery में एक चयनकर्ता है जो डेटा गुणों के लिए खाता है। –

+1

@DanMayor - निश्चित रूप से आप कर सकते हैं: http://jsfiddle.net/userdude/nzgyT/ –

+0

@DanMayor चयनकर्ता इस मुद्दे के लिए भी अप्रासंगिक है – charlietfl

उत्तर

3

कार्य उदाहरण: http://jsfiddle.net/5sKqU/1/

$(document).ready(function() { 
    var group = {}; //an object that we're going to use as a hash 
    $('.myclass').each(function(){ 
     if (group[$(this).attr('data-n')] != true) { 
      group[$(this).attr('data-n')] = true; 

      //do something here once per each group 
      alert('Group: '+ $(this).attr('data-n')); 
     } 
    }); 
}); 

मैं यह सोचते करती हूं कि आप केवल एक बार पृष्ठ लोड पर चलाने की आवश्यकता है। यदि आप अपनी आवश्यकताओं के बारे में और अधिक साझा कर सकते हैं, तो मैं आपको दिखा सकता हूं कि आपको किन परिवर्तनों की आवश्यकता होगी।

+0

+1 हालांकि मैं शायद [एक सरणी] (http://jsfiddle.net/5sKqU/2/) का उपयोग करता। ; पी –

+0

यह निर्णय मेरी राय में सबसे हड़ताली और सुरुचिपूर्ण था! आपके सहयोग के लिए धन्यवाद! – Aleksov

0

आप इस तरह jQuery विशेषता चयनकर्ता के साथ प्रत्येक समूह के बाहर का चयन कर सकते:

$('.myclass[data-n="groupX"]'); 

मैं अगर आप का मतलब है कि आप केवल प्रत्येक समूह में एक तत्व के लिए अपने समारोह लागू करना चाहते थे यकीन नहीं है, लेकिन यदि ऐसा है तो यह आप केवल प्रत्येक में पहली दे देंगे:

$('.myclass[data-n="groupX"]').first(); 

यह देखते हुए कि आप आप सिर्फ अगर वहाँ निर्धारित करने के लिए जब आप हर समूह के माध्यम से फंस गए हैं सेट परिणामस्वरूप में कुछ भी है जाँच कर सकते हैं एन के माध्यम से अपने समूहों लेबल 1।

+0

चयनकर्ता से स्थान हटा दें – charlietfl

1

कुछ इस तरह हो सकता है:

var groups = {}; 
$('.myclass').each(function(i, el) { 
    var n = $(el).data('n'); 
    if(!groups[n]) { 
     groups[n] = $(); 
    } 
    groups[n] = groups[n].add(el); 
}); 

//At this point the object `groups` has one property per group, 
//each value being a jquery collection comprising members of the group. 

//Now the world's your oyster. You can loop through the groups 
//with full access to each group's members if necessary. 
$.each(groups, function(groupName, jq) { 
    //my function 
}); 
1

आप पहले एक संसाधित करने के बाद सभी समूह तत्वों पर एक निश्चित एचटीएमएल विशेषता सेट कर सकते हैं। उसके बाद, आप उस विशेषता के मूल्य की जांच कर सकते हैं:

$('.myclass').each(function(){ 

    if($(this).attr("processed")!="true") { 
     // process... 
     $("[data-n=" + $(this).attr("data-n")).attr("processed", "true"); 
    } else { 
    // skip, or do something else with the element 
    } 

}); 
संबंधित मुद्दे