2013-05-21 4 views
5

मैं कोड की इस पंक्ति में पड़ गए और मैं समझ नहीं इसका क्या मतलब:jquery चयनकर्ता के बाद ब्रैकेट और कोष्ठक क्या मतलब है?

$("#theAppContainer")[s > u ? "addClass" : "removeClass"]("something"); 

मैं समझता हूँ कि पहले भाग तत्व theAppContainer और दूसरे भाग बुलाया चुन रही है, का मूल्यांकन करता है करने के लिए "addClass" अगर s> आप, लेकिन मैं यह नहीं समझ सकता कि कोड की यह पंक्ति कुल मिलाकर क्या करती है।

+1

यह एक टर्नरी ऑपरेटर है, जैसे कि अगर /,, तो '''' से अधिक है, तो addlass आदि का चयन करें – adeneo

+3

एक sidenote के रूप में, यह ध्यान दिया जाना चाहिए कि टॉगल क्लास में एक स्विच है, तो आप बस '$ (" # theAppContainer ")। टॉगल क्लास ('कुछ', एस> यू);' – adeneo

उत्तर

13

The bracket syntax gets the value of a property by name कर रहे हैं, और कोष्ठक समारोह है कि संपत्ति का मूल्य है कि कहते हैं। यह इसके बराबर है:

var container = $('#theAppContainer'); 

if(s > u) { 
    container.addClass('something'); 
} else { 
    container.removeClass('something'); 
} 

इसके अलावा, कृपया इस तरह कोड कभी न लिखें।

$('#theAppContainer').toggleClass('something', s > u); 
+0

मुझे टर्नरी की बहुत पसंद है, लेकिन इस मामले में, यह एक हास्यास्पद हाहा है, सहमत! –

+0

मुझे पता नहीं, मैं इसे पसंद करता हूं। यह मैंने देखा JQuery एकल-अस्तर का सबसे पागलपन भी नहीं है! [एक प्रदर्शन दृष्टिकोण से] (http://jsperf.com/ternary-vs-if-using-jquery), कम से कम, वे लगभग समान हैं। –

+1

@ सैंडीफिफोर्ड: प्रदर्शन पर विचार करने का आखिरी दृष्टिकोण होना चाहिए! वैसे भी, मैंने चीजों को करने का jQuery-esque तरीका जोड़ा है। मुझे देखने के लिए धन्यवाद :) – Ryan

5

$("#theAppContainer") एक jquery वस्तु देता है।

jqueryObject["addClass"] साथ jqueryObject.addClass

तो, jqueryObject["addClass"] रिटर्न jQuery वस्तु पर addClass विधि का पर्याय है।

फिर आप पैरामीटर को पास करने और निष्पादित करने के लिए ("something") का उपयोग करते हैं।

तो आप अनिवार्य रूप से

var myJqueryObject = $("#theAppContainer"); 
if(s > u) { 
    myJqueryObject.addClass("something"); 
} 
else { 
    myJqueryObject.removeClass("something"); 
} 
1

स्क्वायर ब्रैकेट अंकन: =)

इसके अलावा भी, toggleClass एक दूसरे switch तर्क यह है कि आप के बजाय का उपयोग कर सकते लेता है।

$('#element')['hide'](700)

डॉट अंकन:

$('#element').hide(700)

दूसरी बात (?:)ternary operator

कि एक बूलियन मान लौट रहा एक बयान तुलना करता है कहा जाता है,
कहाँ s>u एक बयान है, और परिणाम के आधार पर मानों उपयोग किया जाता है:

STATEMENT ? IF TRUE USE THIS : IF FALSE USE THAT ;

अगर s > u उपयोग 'addClass' अन्य 'removeClass'
का अर्थ है कि आपको $("#theAppContainer")["addClass"]("something"); मिलेगा यदि s > u और $("#theAppContainer")["removeClass"]("something"); यदि s===u || s<u
जिसमें डॉट अंकन में अनुवाद किया जा सकता:

$("#theAppContainer").addClass("something"); 

या

$("#theAppContainer").removeClass("something"); 

यह आपको लगता है कि विशेष मामले में toggleClass() विधि का उपयोग कर सकते हैं कारण, यह करने के लिए सबसे अच्छा तरीका नहीं है, लेकिन किसी भी जिस तरह से यह जानना अच्छा है।
और यह सच नहीं है कि आपको ब्रैकेट नोटेशन का उपयोग नहीं करना चाहिए। उन्नत जेएस में आप सभी लाभ देखेंगे।

+0

यदि आप मेरे उत्तर के बारे में बात कर रहे हैं, तो मैंने कभी नहीं कहा कि ब्रैकेट नोटेशन का उपयोग न करें। यह इस मामले में सिर्फ एक मूर्ख विकल्प है। – Ryan

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