jQuery या चयनकर्ता?


325

मुझे आश्चर्य हो रहा है कि क्या jQuery के चयनकर्ताओं में "या" तर्क रखने का कोई तरीका है। उदाहरण के लिए, मुझे पता है कि एक तत्व या तो क्लास क्लास या क्लासबी के साथ एक तत्व का वंशज है, और मैं कुछ ऐसा करना चाहता हूं elem.parents('.classA or .classB')। क्या jQuery ऐसी कार्यक्षमता प्रदान करता है?

जवाबों:


494

अल्पविराम का उपयोग करें।

'.classA, .classB'

आप अंतरिक्ष को छोड़ना चुन सकते हैं।


43
यह ध्यान दिया जाना चाहिए कि यह वास्तव में 'या' चयनकर्ता नहीं है, एक में कई चयनकर्ताओं की तरह।
अलेक्स

49
@alex: लेकिन यह दो बार एक ही तत्व का चयन नहीं करेगा (जो एक संचालक ऑपरेटर होगा)। यह वास्तव में एक OR चयनकर्ता है क्योंकि यह दो या दो से अधिक सेटों का एक संघ बनाता है (जबकि एक चौराहा है)।
क्लेटस

धन्यवाद, वह काम करता है। एक डिबगिंग ओवरसाइट की वजह से मुझे लगा कि कॉमा का उपयोग करने का मतलब है 'और'।
सुअन

38
ANDहोगा .classA.classB
डैनियल ए। व्हाइट

2
यह वास्तव में इस बात पर निर्भर करता है कि मूल प्रश्न क्या निहित है ... अर्थात: शास्त्रीय रूप से 'या' ऑपरेटर शॉर्ट-सर्किट होगा। इस प्रकार एक 'या' परिचालक jquery parlance में, संभवतः शॉर्ट-सर्किट भी कर सकता है।
मैथ्यू

71

अल्पविराम का उपयोग करना पर्याप्त नहीं हो सकता है यदि आपके पास कई jQuery ऑब्जेक्ट हैं जिन्हें शामिल होने की आवश्यकता है।

.Add () विधि परिणाम सेट करने के लिए चयनित तत्वों को जोड़ता है:

// classA OR classB
jQuery('.classA').add('.classB');

यह तुलना में अधिक क्रियात्मक है '.classA, .classB', लेकिन आपको निम्न की तरह अधिक जटिल चयनकर्ताओं का निर्माण करने देता है:

// (classA which has <p> descendant) OR (<div> ancestors of classB)
jQuery('.classA').has('p').add(jQuery('.classB').parents('div'));

22

मैं वास्तव में इस कार्यक्षमता के लिए एक अविश्वसनीय रूप से सरल (कोड की 5 लाइनें) प्लगइन लिखा है:

http://byrichardpowell.github.com/jquery-or/

यह आपको प्रभावी रूप से यह कहने की अनुमति देता है "यह तत्व प्राप्त करें, या यदि वह तत्व मौजूद नहीं है, तो इस तत्व का उपयोग करें"। उदाहरण के लिए:

$( '#doesntExist' ).or( '#exists' );

जबकि स्वीकृत उत्तर इस तरह की कार्यक्षमता प्रदान करता है, यदि दोनों चयनकर्ता (कॉमा से पहले और बाद में) मौजूद हैं, दोनों चयनकर्ताओं को वापस कर दिया जाएगा।

मुझे आशा है कि यह किसी के लिए भी उपयोगी साबित होगा जो इस पृष्ठ पर Google के माध्यम से उतर सकता है।


4
यह बूलियन या ऑपरेटर कैसे काम करता है। यदि दोनों चयनकर्ता तत्व वापस करते हैं, तो OR ऑपरेटर को उन सभी को वापस करना चाहिए, न कि पहले चयनकर्ता के तत्वों को। आपके प्लगइन का नाम "ifEmpty" या "और" या ऐसा कुछ होना चाहिए।
अल्प

13
@ एलएलपी: वैनिला जेएस में "a" || "b"बनाम के व्यवहार पर विचार करें null || "b"। यदि हम यहाँ भी वही व्यवहार लागू करते हैं, यदि वह मौजूद है तो $(a).or(b)वापस लौटना चाहिए $(a), अन्यथा वापस लौट जाना चाहिए $(b)। मुझे नहीं लगता कि इस नामकरण में कुछ भी गलत है, क्योंकि "या" JS के व्यवहार से मेल खाता है "||" (या) संचालक।
FtDRbwLXw6

4
मैं इसे एक के रूप में भी देखता हूं or। जो दूसरे के बारे में बात कर रहे हैं वह एक कार्रवाई concatया अधिक पसंद है merge
लीनो पेलेटियर

1
व्यक्तिगत रूप से मैं इसे "या" नहीं कहूंगा, क्योंकि यह भ्रम पैदा कर सकता है (भले ही यह तकनीकी रूप से सही हो सकता है क्योंकि यह एक विशेष प्रकार का है अगर / या)। यह प्रभावी रूप से
सुस्त सहक्रियाशीलता

'एक्सोर' (एक्सक्लूसिव या) शब्द सटीक शब्द होगा, लेकिन अक्सर लोग एक्सर की तलाश में या तब खोजते हैं, जैसा कि आम तौर पर एक्सर होता है, सामान्य शब्दों में, एक विशिष्ट प्रकार का 'या'।
liljoshu

17

यदि आप तत्व = element1 के मानक निर्माण का उपयोग करना चाहते हैं || एलिमेंट 2 जहां जावास्क्रिप्ट पहले वाला है जो सत्य है, आप वास्तव में ऐसा कर सकते हैं:

element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound');

जो वास्तव में पाया गया पहला तत्व है। लेकिन इस फैशन में jQuery चयनकर्ता अल्पविराम निर्माण (जो पाया तत्वों की एक सरणी देता है) का उपयोग करने के लिए एक बेहतर तरीका होगा:

element = $('#someParentElement').find('.somethingToBeFound, .somethingElseToBeFound')[0];

जो पहले पाए गए तत्व को वापस करेगा।

मैं समय-समय पर एक सूची में एक सक्रिय तत्व या कुछ डिफ़ॉल्ट तत्व खोजने के लिए समय-समय पर सक्रिय तत्व नहीं होने पर उपयोग करता हूं। उदाहरण के लिए:

element = $('ul#someList').find('li.active, li:first')[0] 

जो सक्रिय के एक वर्ग के साथ किसी भी झूठ को वापस करेगा या, कोई भी नहीं होना चाहिए, बस आखिरी झूठ वापस करेगा।

या तो काम करेगा। हालांकि, संभावित प्रदर्शन दंड हैं, || जैसे ही यह कुछ सत्य पाया जाता है प्रसंस्करण बंद कर देंगे जबकि सरणी दृष्टिकोण सभी तत्वों को खोजने की कोशिश करेगा, भले ही वह पहले से ही मिल गया हो। फिर, फिर से उपयोग करते हुए || निर्माण में संभावित रूप से प्रदर्शन के मुद्दे हो सकते हैं यदि इसे वापस लेने से पहले कई चयनकर्ताओं को गुजरना पड़ता है, क्योंकि इसे प्रत्येक के लिए मुख्य jQuery ऑब्जेक्ट को कॉल करना होगा (मुझे वास्तव में नहीं पता है कि यह प्रदर्शन हिट है या नहीं यह सिर्फ तर्कसंगत लगता है कि यह हो सकता है)। सामान्य तौर पर, हालांकि, मैं सरणी दृष्टिकोण का उपयोग करता हूं जब चयनकर्ता एक लंबी स्ट्रिंग है।


मुझे लगता है कि '(कुछ। निर्माण। क्योंकि पाते हैं कि .somethingElseToBeFound DOM में .somethingToBeFound से पहले है, यह वापस आ जाएगा, भले ही .somethingToBeFound मौजूद हो।
रेमो

0

अंत में मैंने पाया है कि यह कैसे करना है:

div:not(:not(.classA,.classB)) > span

(कक्षा के साथ div का चयन करता है classAया classBसीधे बच्चे की अवधि के साथ)


-2

डैनियल ए। व्हाइट सॉल्यूशन कक्षाओं के लिए बहुत अच्छा काम करता है।

मुझे एक स्थिति मिली है जहां मुझे इनपुट फ़ील्ड्स जैसे doe_1_card को ढूंढना पड़ा जहां 1 एक इंडेक्स है।

मेरा समाधान हो गया है

$("input[name^='donee']" && "input[name*='card']")

हालांकि मुझे यकीन नहीं है कि यह कितना इष्टतम है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.