2011-01-31 18 views
29

प्रत्येक() के लिए jQuery बराबर क्या है के लिए:jQuery - प्रत्येक() के बराबर है, लेकिन एक भी तत्व

$(".element").each(function(){ 
    // do stuff 
}); 

जब एक ही तत्व के लिए एक समारोह संलग्न, #element की तरह?

+0

क्या कोई कारण है कि प्रत्येक का उपयोग क्यों नहीं करेगा? – Lance

+0

आप वास्तव में इसमें शामिल हो रहे हैं? लेकिन आप वास्तव में क्या मतलब है? मुझे नहीं लगता कि मैं सवाल समझता हूं। – jAndy

+3

यह काम करता है, लेकिन ऐसा इस तरह से गलत लगता है :) – Alex

उत्तर

18

तुम हमेशा एक चर में jQuery वस्तु देख सकते हैं:

var $el = $('#element'); 

... तो यह हेरफेर।

$el.doSomething();   // call some jQuery methods from the cached object 
$el.doSomethingElse(); 

कारण आप .each() चाहता था this के रूप में डोम तत्व को संदर्भित किया गया था, तो आप वास्तव में this कीवर्ड, की जरूरत नहीं है यह करने के लिए आप बस jQuery वस्तु से बाहर डोम तत्व प्राप्त कर सकते हैं।

var element = $('#element')[0];  // both of these give you the DOM element 
var element = $('#element').get(0); //  at index 0 

इनमें से दो बराबर हैं, और DOM एलीमेंट .each() में this के रूप में संदर्भित किया जाएगा पुनः प्राप्त करेगा।

alert(element.tagName); // alert the tagName property of the DOM element 
alert(element.id);  // alert the ID property of the DOM element 

मैं ध्यान दें चाहते हैं कि यह जरूरी प्रत्येक उपयोग करने के लिए एक भी तत्व पर पुनरावृति करने के लिए बुरा नहीं है।

लाभ यह है कि आपके पास DOM तत्व तक आसानी से पहुंच है, और आप इसे एक नए दायरे में कर सकते हैं ताकि आप चर के साथ आसपास के नामस्थान को अव्यवस्थित न करें।

इसे पूरा करने के अन्य तरीके भी हैं। इस उदाहरण लें:

(function($) { 

    // Inside here, "this" will refer to the DOM element, 
    // and the "$" parameter, will reference the jQuery library. 

    alert(this.tagName); 

    // Any variables you create inside will not pollute the surrounding 
    //  namespace. 

    var someVariable = 'somevalue'; // is local to this function 

}).call($('#element')[0], jQuery); 
+2

'$ ('# element') [0]! = $ ('# Element')। (0) 'पूर्व डीओएम तत्व लौटाता है, बाद वाला डीओएम तत्व का एक jQuery मानचित्र ऑब्जेक्ट देता है। आप '$ ('# element') को कॉल कर सकते हैं। (0)। क्लिक करें (फ़ंक्शन ...);' जबकि '$ ('# element') [0] .click (function ...);' होगा अवैध। – zzzzBov

13

सीधे अपने सवाल का जवाब करने के लिए, .each() सहित 1.

तुम भी .each() कॉल पूरी तरह से छोड़ सकते हैं और सिर्फ $('#element') पर jQuery तरीकों फोन किसी भी आकार के तत्व सेट पर सामान्य रूप से चल रही है। याद रखें कि यदि आप jQuery ऑब्जेक्ट को वापस करते हैं तो सभी jQuery विधि कॉल नहीं करते हैं तो आप सबसे अधिक श्रृंखला बना सकते हैं। विधियों के अनुसार, यह इस मामले के लिए कई तत्वों पर भी काम करता है।

$('#element').doSomething().doSomethingElse(); 

आप वस्तु से अधिक बार संदर्भित करने के लिए की जरूरत है, एक चर बनाने:

var $elm = $('#element'); 
$elm.doSomething(); 
doSomethingElse($elm); 
2

अगर वहाँ केवल 1 तत्व है, आप सामान्य रूप से चयनकर्ता का उपयोग करके पहुँच सकते हैं।

$('#your_element').your_event(function() { 

}); 
1

आप ('# तत्व') $ की तरह मतलब है। बच्चों()। प्रत्येक() मान आप एक आईडी के साथ एक उल तरह कुछ है और आप इसे अंदर प्रत्येक ली चाहते हैं?

8

first() का उपयोग करें।

each() सभी तत्वों से मेल खाता है, जबकि first() केवल पहले से मेल खाता है।

अन्य चयनकर्ता भी हैं। जब आप चयनकर्ता में आईडी का उपयोग करते हैं, तो आपको केवल एक तत्व प्राप्त होगा। .element और #element के बीच यह मुख्य अंतर है। पहला एक वर्ग है जिसे कई तत्वों को सौंपा जा सकता है, जबकि दूसरा एक आईडी है जो केवल (सबसे अधिक) एक तत्व से संबंधित है।

यदि आप केवल एक (या 0) तत्व लौटाए जाते हैं तो भी आप प्रत्येक का उपयोग कर सकते हैं। साथ ही, यदि आप किसी ईवेंट को लिंक करना चाहते हैं तो आप प्रत्येक को पूरी तरह से छोड़ सकते हैं। जब आप तत्वों की सूची में प्रत्येक तत्व के लिए एक विशिष्ट फ़ंक्शन निष्पादित करना चाहते हैं तो आप each का उपयोग करते हैं।

+3

धन्यवाद! मैं यहाँ इस के लिए देख आया था। अन्य सभी उत्तरों अनावश्यक रूप से फ़ंक्शन को एक्सटेंशन विधि में जोड़ते हैं। – KyleMit

2

परदे के पीछे, each सिर्फ एक for पाश कि map में प्रत्येक तत्व के माध्यम से दोहराता jQuery द्वारा दिया है।

यह अनिवार्य रूप से और डैगर है; जैसा कि:

var i, map = $('...selector...'); 
for (i = 0; i < map.length; i++) 
{ 
    someFunction(i, map[i]); 
} 

और डैगर; इसके अलावा इसके लिए और भी कुछ है, जिसमें नक्शा तत्व आदि के संदर्भ में फ़ंक्शन को कॉल करना शामिल है।

यह कार्यान्वयन चयन में each तत्व पर फ़ंक्शन को कॉल करने का सुविधाजनक तरीका प्रदान करना है।

+0

यह वास्तव में 'someFunction.call (नक्शा [i], i, मानचित्र [i]) 'या' someFunction.apply (नक्शा [i], [i, map [i]]) '। बस नाइटपीकी होने के लिए। – btleffler

+0

@ बटलफ्लर, हां इसलिए "† इसके अलावा इसके लिए और भी कुछ है"। जिस कारण से मैंने उन विशेष अवशोषणों का उपयोग नहीं किया, वह शराब और पठनीयता के लिए था। – zzzzBov

+0

हा! मुझे नहीं पता कि मैं उसे कैसे याद करता हूं। यह सही समय था। मैं क्षमाप्रार्थी हूं। – btleffler

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