"सभी लेकिन नहीं" jQuery के चयनकर्ता


89

मैं (HTML का उपयोग करके) सभी HTML HTML मार्कअप में निम्नानुसार चुन सकता हूं:

$('div')

लेकिन मैं उपरोक्त चयन से किसी विशेष div(कहते हुए id="myid") को बाहर करना चाहता हूं ।

मैं Jquery फ़ंक्शंस का उपयोग कैसे कर सकता हूं?


2
jquery में नहीं चयनकर्ता का उपयोग करें
अभिजीत

जवाबों:


171

सरल:

$('div').not('#myid');

उपयोग करने से .not()उसके द्वारा दिए गए सेट से दिए गए चयनकर्ता द्वारा मिलान किए गए तत्वों को हटा दिया जाएगा $('div')

आप :not()चयनकर्ता का उपयोग भी कर सकते हैं :

$('div:not(#myid)');

दोनों चयनकर्ता एक ही काम करते हैं, हालांकि :not(), तेजी से संभव है , क्योंकि jQuery के चयनकर्ता इंजन सिज़ल इसे एक देशी .querySelectorAll()कॉल में अनुकूलित कर सकते हैं ।


1
@ रेयानोस मुझे नहीं लगता कि यह आवश्यक रूप से बुरा है , लेकिन इसका उपयोग .not()करना कहीं अधिक बेहतर है :not()
बोजंगल्स

1
मुझे लगता है कि यह $('div:not(#myid)');(उद्धरण के बिना) होना चाहिए । @ रेयानोस: क्यों? :not()एक CSS3 चयनकर्ता है। jQuery सीधे चयनकर्ता को पास कर सकता है querySelectorAllयदि समर्थित हो ...
फेलिक्स क्लिंग

@FelixKling यह चयनकर्ताओं 4 के एक भाग के रूप में ठीक है । हालांकि jQuery में यह धीमी .notऔर कम पठनीय है। मुझे कहना चाहिए ": jQuery में चयनकर्ता नहीं"
Raynos

@Raynos: कोई चयनकर्ता युक्ति ने कभी भी उद्धरणों की अनुमति नहीं दी है :not()। चयनकर्ताओं 4 के लिए न तो यह चयनकर्ता नया है, न ही इसे उद्धरणों की अनुमति देने के लिए बदला गया है। हालांकि अधिक जटिल चयनकर्ताओं को अनुमति देने के लिए इसे बदल दिया गया है। जब तक मैं अपनी टिप्पणी ... गलत समझा
BoltClock

1
@PeterKrauss मैंने अभी एक jsPerf बेंचमार्क किया है जो querySelectorAllसबसे तेज़ के रूप में चिह्नित करता है। वास्तविक विश्व बेंचमार्क नहीं है, लेकिन उम्मीद की जा रही है कि इसे देखने के लिए jQuery के आंतरिक से कोई उपरि नहीं है। :not()वास्तव में तेजी से, संभवत: क्योंकि सिज़ल जानता है कि वह इसे उपयोग करने के लिए अनुकूलित कर सकता हैquerySelectorAll()
Bojangles

9
var els = toArray(document.getElementsByTagName("div"));
els.splice(els.indexOf(document.getElementById("someId"), 1);

आप इसे पुराने ढंग से कर सकते हैं। इतना सरल कुछ के साथ jQuery के लिए कोई ज़रूरत नहीं है।

प्रो युक्तियाँ:

डोम तत्वों का एक सेट सिर्फ एक सरणी है, इसलिए अपने पसंदीदा toArrayतरीके का उपयोग करें NodeList

एक सेट में तत्वों को जोड़ना बस है

set.push.apply(set, arrOfElements);

एक सेट से एक तत्व को निकालना है

set.splice(set.indexOf(el), 1)

आप कई तत्वों को एक साथ आसानी से नहीं निकाल सकते :(


1
आजकल (2017) में शायद देशी जावास्क्रिप्ट का उपयोग .querySelector()या इसके .querySelectorAll()साथ div:not(#myid) तेज ... क्या यह है?
पीटर क्रूस

8
$("div:not(#myid)")

[दस्तावेज़]

या

$("div").not("#myid")

[दस्तावेज़]

सभी तरीकों का चयन करने के लिए मुख्य तरीके हैं, लेकिन एक आईडी

आप यहां डेमो देख सकते हैं


आज (2017) शायद $("div:not(#myid)") तेज है ... मूल जावास्क्रिप्ट का उपयोग करते समय या इसके लिए sizzlejs अनुकूलन की जांच करें । .querySelector().querySelectorAll()
पीटर क्रूस

4
   var elements =  $('div').not('#myid');

इसमें id 'myid' वाले को छोड़कर सभी divs शामिल होंगे।




3

आप .notjQuery लाइब्रेरी की संपत्ति का उपयोग करते हैं:

$('div').not('#myDiv').css('background-color', '#000000');

इसे यहां कार्रवाई में देखें । Div #myDiv सफेद होगा।

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