2012-12-15 11 views
5

मैं jQuery की मेरी समझ बढ़ाने की कोशिश कर रहा हूं। कृपया निम्नलिखित कोड पर विचार करें।jQuery संग्रह के साथ काम करना

if ($('.myClass').data('id') == '123') { 
} 

यह कैसे काम करता है? यह तब तक आसान लगता है जब तक आप समझते हैं कि $() तत्वों का संग्रह देता है। तो उपर्युक्त कोड वास्तव में क्या करता है? इस तरह के तत्वों के संग्रह के लिए डेटा-आईडी विशेषता के मान की तुलना करने के लिए यह समझ में आता है?

(मैं समझता हूँ कि मैं each() उपयोग कर सकते हैं स्पष्ट रूप से संग्रह में प्रत्येक तत्व का परीक्षण करने के मेरा प्रश्न क्या कोड ऊपर करता है के बारे में है।।)

+1

'.डेटा ('आईडी') 'संग्रह में पहले आइटम के लिए मान देता है। क्या आप यह पूछने के लिए पूछ रहे हैं कि संग्रह में _all_ आइटमों में उस विशेष डेटा मान है या नहीं? – nnnnnn

+1

@nnnnnn + 1 लेकिन मुझे लगता है कि ओपी (सही) टिप्पणी कर रहा था कि यह [दस्तावेज़ीकरण] (http://api.jquery.com/data/) से स्पष्ट नहीं है कि 'डेटा (obj) 'मान वापस कर दिया गया है पहले मिलान तत्व के लिए। –

+0

नहीं, मैंने पूछा होगा कि अगर मैं यही जानना चाहता हूं। तो शायद आपने अपनी टिप्पणी के पहले भाग के साथ प्रश्न का उत्तर दिया। –

उत्तर

2

.data('id') संग्रह में पहले आइटम के लिए मान देता है, लेकिन .data('id','xyz') संग्रह में सभी आइटम के लिए मूल्य सेट हो जाएगा - आदि बहुत .html(), .text() जैसे अन्य jQuery के तरीकों के रूप में ही व्यवहार,

यह हो सकता है ऐसा लगता है कि पहले if कथन में पहले परीक्षण करने के लिए यह समझ में नहीं आता है, लेकिन यह उन मामलों के लिए अधिक समझ में आता है जहां आप जानते हैं कि वास्तव में एक तत्व होगा, उदाहरण के लिए जब आपका चयनकर्ता आईडी है, या जब आप $(this).data('id') का उपयोग करते हैं घटना हैंडलर या कुछ।

आप परीक्षण करने के लिए कैसे है कि क्या संग्रह में सभी आइटम एक विशेष डेटा मान आप ऐसा कर सकते है पूछ रहे हैं:

var $col = $('.myClass'); 
if ($col.length === $col.filter(function(){return $(this).data('id') === '123';}).length) { 
    // do something 
} 

या फिर आप कम से कम एक है कि डेटा है, तो जानना चाहते हैं, तो मूल्य:

if ($('.myClass').filter(function(){return $(this).data('id') === '123';}).length > 0) { 
    // do something 
} 
+0

मैंने इसे और अधिक स्पष्ट करने के लिए अपना प्रश्न अपडेट किया। ठीक है, संग्रह में पहले आइटम पर काम करना अच्छा है। न केवल समझना आसान है, लेकिन यह ठीक तरह से व्यवहार करता है जैसा मैं चाहूंगा यह करने के लिए। –

0

आप jQuery चाहते प्रत्येक() का उपयोग कर सकते हैं - http://api.jquery.com/jQuery.each/

उदाहरण टिप्पणियों में चूंकि स्टैक ओवरफ्लो जेएसफ़िल्ड को पसंद नहीं करता है।

+0

http://jsfiddle.net/ByUeE/ – daniel

+0

क्षमा करें, मुझे लगता है कि मेरे प्रश्न के शब्द में कुछ अस्पष्टता थी। मैंने इसे और अधिक स्पष्ट करने के लिए अद्यतन किया है। –

1

मेरा मानना ​​है कि अगर आप एक jQuery समारोह के माध्यम से एक मूल्य प्राप्त करने के लिए कोशिश कर रहे हैं, यह संग्रह में पहले आइटम से मान देता है। उदाहरण के लिए अगर आपके पास:

<div class='1'></div> 
<div class='2'></div> 
<div class='3'></div> 

और आप चलाएँ:

$('div').attr('class'); 

यह वापस आ जाएगी "1"। मुझे नहीं पता कि यह सभी jQuery कार्यों के माध्यम से वर्दी है, लेकिन यह अपेक्षित व्यवहार है।

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