jQuery - एकाधिक: चयनकर्ता नहीं


80

मैं पेज-वाइड लिंक को लक्षित करने की कोशिश कर रहा हूं जो '#' से शुरू नहीं होता है और इन-लाइन जावास्क्रिप्ट को शामिल नहीं करता है, लेकिन मुझे यह पता लगाने में समस्या आ रही है कि चयनकर्ता को ठीक से कैसे तैयार किया जाए।

कई चयनकर्ताओं के बारे में जो मैंने जाना है, उसके आधार पर यह काम करना चाहिए, दोनों चयनकर्ता स्वतंत्र रूप से काम करते हैं, बस एक साथ नहीं!

$('a:not([href*=javascript]), a:not([href^=#])')
.each(function(){...

क्या आपने 'या' ऑपरेटर की कोशिश की है? जैसे: $ ('a: not ([href * = "javascript | #"])')
Bas Slagter

आपका मूल कोड ठीक काम कर रहा है इसलिए कृपया अधिक कोड और HTML पोस्ट करें ताकि हम देख सकें कि क्या गलत हुआ ..
शैडो विजार्ड 8

जवाबों:


141

प्रयोग करके देखें

$('a:not([href*=javascript]):not([href^=#])') ...

8
हालांकि यह काम करता है, आप अनावश्यक रूप से 2 बार नकारते हैं। इसका प्रदर्शन प्रभाव हो सकता है, मुझे नहीं पता। मुझे हालांकि साक्षी / सादगी पसंद है, यह पढ़ने में आसान हो सकता है$('a:not([href*=javascript],[href^=#])')
एड्रिन बी

Hi @AdrienBe इस फिडेल में: jsfiddle.net/pranavcbalan/dd6tuent/2 मैं दूसरे कॉलम और आखिरी वाले से बचना चाहता हूं। मैं आपकी सलाह के अनुसार ऐसा करने का प्रयास कर रहा हूं: $ ('इनपुट: नहीं: (अंतिम: nth-child (2))', $ tr) .each (फ़ंक्शन () {// अंतिम और दूसरे एक को छोड़कर इनपुट पर पुनरावृति। कुल + = संख्या ($ (यह) .val) ()) 0; // पार्स और मूल्य जोड़ें, अगर NaN तो 0} जोड़ें); लेकिन यह मदद नहीं करता है। कृपया कोई आइडिया?
3AK

@jtbandes, मैंने आपके सुझाव के साथ भी कोशिश की, काम नहीं करता। मैं कहीं न कहीं कोई छोटी सी गलती कर रहा हूं। क्या आप कृपया jsfiddle को देख सकते हैं।
3AK

@ सिज़लर क्या आपने "सिर्फ" एक कॉलम से बचकर पहले काम कर लिया?
एड्रिन बी

@ AdrienBe हाँ। मैं इसे कर सकता हूँ। कृपया इस फिडेल को देखें। jsfiddle.net/sizzler/xodzm0qw/3 मैं यहां size1 कॉलम और कुल कॉलम से बचने में सक्षम हूं।
3AK

43

आप भी कोशिश कर सकते हैं:

$('a').not('[href^=#],[href*=javascript]')

1
त्वरित नोट: यदि आप पहले से ही चर में अपने चयनकर्ता हैं, तो उद्धरणों के बीच अल्पविराम जोड़ना न भूलें। जैसे:$('a').not(selOne + ',' + selTwo + ',' + selX);
एड्रिएन बी

हमें संभवतः प्रदर्शन के कारणों के :notबजाय .not()रास्ते का उपयोग करना चाहिए । देखें stackoverflow.com/questions/8845811/…
Adrien Be

16

जैसा कि jQuery में संकेत दिया गया है: a (नहीं) में कई चयनकर्ता? , यह ऐसा करने का सही तरीका है:

$( 'a:not([href*=javascript],[href^=#])' )

यदि आप पहले से ही अपने चयनकर्ताओं को चर में नकारने के लिए कॉमा के आसपास उद्धरण देना न भूलें

var selOne = '[href*=javascript]';
var selTwo = '[href^=#]';
$('a:not(' + selOne + ',' + selTwo + ')')

मैं मानता हूं कि कोड थोड़ा भ्रमित करता है लेकिन इसका एक फायदा है, आप इस तरह की चीजें कर सकते हैं:

var selOne = '[href*=javascript], [href^=#]';
var selTwo = '.anotherSelector, .andAnother, .andSoOn';
$('a:not(' + selOne + ',' + selTwo + ')')

जब भी आपको किसी कारण से समूह चयनकर्ताओं की आवश्यकता होती है, तब यह उपयोगी होता है। चयनकर्ताओं के समान समूह का उपयोग कोड में कहीं और किया जाता है।


उसी टेक्निक का उपयोग कर एक जीवंत उदाहरण

$('div:not(.rose-flower,.bus-vehicle)').css('color','red');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="bus-vehicle">I am a bus</div>
<div class="strawberry-fruit">I am a strawberry</div>
<div class="rose-flower">I am a rose</div>

Http://jsfiddle.net/bmL8gz5j/ पर भी


:notबनाम .not(): प्रदर्शन कारणों के लिए, आपको इसके :notबजाय उपयोग करना चाहिए .not(), ": नहीं" और ".not ()" चयनकर्ताओं के उपयोग के बीच प्रदर्शन अंतर देखें ?

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