2011-08-07 7 views
7

निम्नलिखित

$("#identifier div:first, #idetifier2").fadeOut(300,function() { 
    // I need to reference just the '#identifier div:first' element 
    // however $(this) will grab both selectors 
}); 

सिर्फ बुला $ की तुलना में इस दूसरे के बारे में जाने के लिए एक बेहतर तरीका है दिया?

+0

** यह ** वर्तमान तत्व को संदर्भित करता है। चूंकि आपका चयनकर्ता कई आइटम ढूंढने के समाप्त होता है, इसलिए यह प्रत्येक के लिए ** fadeOut ** फ़ंक्शन पर लागू होता है। आप वास्तव में क्या करने की कोशिश कर रहे हैं? – alkos333

+0

दो तत्वों को फीका, उनके साथ अलग से काम करें, फिर उन्हें वापस फीका। मैं इसे एक अलग तरीके से प्राप्त कर सकता हूं, जो मुझे पता है। हालांकि मैं इस मनोरंजक में यह कैसे करूँगा इस बारे में उत्सुक हूं। – rlemon

उत्तर

5

नहीं, यह प्रत्येक हैंडल के लिए अलग-अलग फ़ंक्शन को कॉल करेगा।

अपने चयनकर्ता में अल्पविराम बराबर है कह रहे हैं:,

$("#identifier div:first, #idetifier2").fadeOut(300,function() { 
    if($(this).is("#identifier div:first") { 
    // do something 
    } 
}); 

लेकिन यदि आप अलग अलग काम करने के लिए (क्या लगता है के रूप में चाहते हैं:

$("#identifier div:first").fadeOut(300,function() { 
    // $(this) -> '#identifier div:first' 
    }); 

$("#idetifier2").fadeOut(300,function() { 
    // $(this) -> '#identifier2' 
}); 

आप देख सकते हैं कह रही है (untested) द्वारा आपकी पोस्ट से), उन्हें अलग से संलग्न करने के लिए बेहतर है।

1

बस जाँच जो आईडी $(this)

if(this.id == "identifier"){ //your code goes here } 
+1

'this.id' भी छोटा (और तेज़) है। –

+0

आप सही हैं :) –

+2

आईडी में हैश प्रतीक शामिल नहीं है। –

3

में आप वर्तमान में संसाधित कर रहे हैं के बारे में क्या कई लोगों jQuery में महसूस करने के लिए नहीं है यह है कि जब एक से अधिक मिलान किया चयनकर्ताओं कर रहे हैं, जो कुछ कार्यों चयनकर्ता सूची के बाद कर रहे हैं प्रत्येक व्यक्तिगत चयनकर्ता पर एक समय में अलग से कहा जाएगा।

तो $("#identifier div:first, #identifier2") अलग से दोनों मिलान हो जाएगा:

$("#identifier div:first") 
and 
$("#identifier2") 

और, निर्दिष्ट fadeOut फ़ंक्शन को कॉल करें और यह प्रत्येक मैच के लिए अलग से हैंडलर है। इसका मतलब है कि प्रत्येक हैंडलर के पास मिलान करने वाले चयनकर्ता के मिलान के लिए this मान सेट होगा।

आंतरिक jQuery के अंदर, वहाँ इस छद्म कोड की तरह एक पाश है कि सभी लौटे चयनकर्ता मैचों के माध्यम से दोहराता और हर एक के लिए श्रृंखला में अगले फ़ंक्शन को कॉल:

for (var i = 0; i < matches.length; i++) { 
    jQuery["fadeOut"].call(matches[i], duration, easing, fn); 
} 

यदि आप चाहते हैं अलग-अलग कोड होने के लिए दो अलग-अलग मैचों के लिए इस्तेमाल किया है, तो यह सिर्फ दो अलग-अलग jQuery बयान उपयोग करने के लिए बेहतर हो सकता है:

$("#identifier div:first").fadeOut(300,function() { 
    // do stuff for #identifier div:first 
}); 

$("#identifier2").fadeOut(300,function() { 
    // do stuff for #identifier2 
}); 

आप ब्लॉक में कोड का एक बहुत कुछ है, तो और यह ज्यादातर एक ही है, तो आप भी एक के भीतर शाखा कर सकते हैं सामान्य कोड का ब्लॉक:

$("#identifier div:first, #identifier2").fadeOut(300,function() { 
    if (this.id != "identifier2") { 
     // execute code that only applies to the #identifier match 
    } 
    // execute rest of common code 
}); 
+0

वह # पहचानकर्ता की जांच नहीं कर रहा है लेकिन इसके अंदर पहला div है। – Mrchief

+0

@ मर्चिफ़ - नमूना कोड को सही किया। – jfriend00

+0

:)। और यदि आपके पास बहुत कुछ है? – Mrchief

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