2011-12-14 7 views
17

उदाहरण के लिए, मैं निम्नलिखित है कहना: अबjQuery: क्या संभवतः 3 कक्षाओं के साथ तत्वों में से केवल एक वर्ग वाले तत्वों का चयन करना संभव है?

<span class="a b c">Has class a, b, and c</span> 
<span class="a">Has class a</span> 
<span class="b c">Has class b and c</span> 
<span class="a c">Has class a and c</span> 
<span class="a c">Has class a and c</span> 
<span class="a">Has class a</span> 

, मेरे पास है केवल वर्ग एक सभी तत्वों का चयन रखना चाहते हैं।
मतलब केवल दूसरा और अंतिम span एस चयनित होगा।
क्या ऐसा करने का कोई आसान तरीका है?

उत्तर

4

मैं अगर तुम यह करने के लिए करना चाहता था तो आप बस कर सकता है लगता है:

var spans = $("span[class='a']"); 
+3

संक्षिप्त टिप्पणी: यदि नहीं, तो फ़ंक्शन निष्पादित आप फिल की तरह यहाँ है शब्द 'चयनकर्ता में span' शामिल करने के लिए नहीं है। यदि वहां divs या imgs हैं जिनके पास वांछित वर्ग हो और आप उन्हें '$ ("[class =' ​​a ']") चुनने के लिए चुनना चाहते हैं। – maxedison

+1

इस समस्या में यह है कि यदि विशेषता में कोई सफेद जगह है, तो यह टूट जाएगा।कक्षा चयनकर्ताओं में यह समस्या नहीं है। –

32
$('.a').not('.b, .c') 

यह है कि b या c नहीं है वर्ग a साथ सभी तत्वों का चयन करेंगे। हालांकि, वे अभी भी d, e इत्यादि कर सकते हैं, आदि। फिल का जवाब का प्रयोग करें यदि आप वास्तव में केवल a के अलावा किसी वर्ग के तत्व नहीं चाहते हैं।

+0

उपरोक्त क्योंकि असंबद्ध वर्गों को अनुमति देना संभवतः कई मामलों में बेहतर है, और परिणामी कोड क्लीनर है। हालांकि यह कम "भविष्य का सबूत" है, लेकिन शायद आप वास्तव में भविष्य के सबूत की तरह नहीं चाहते हैं कि मेरा उत्तर देता है (जो ओपी में सटीक प्रश्न से मेल खाता है)। –

9

(के लिए नीचे देखें क्यों आप वास्तव में क्या सवाल में कहा है नहीं करने के लिए चाहते हो सकता है)

आप [class="a"], "विशेषता चयनकर्ता के बराबर है" हालांकि यह भंगुर है इस्तेमाल कर सकते हैं:

$('span[class="a"]').hide(); 

समस्या यह है कि यदि आपके पास अपनी कक्षा विशेषता में कोई सफेद स्थान है तो यह टूट जाएगा। यह पहेली देखें: http://jsfiddle.net/c7DP7/

आप सामान्य वर्ग चयनकर्ता का उपयोग करके उन वस्तुओं पर मूलभूत क्वेरी करके इसे ठीक कर सकते हैं, फिर केवल a सेट करते समय उन्हें फ़िल्टर करें (और उस दूसरे फ़िल्टर में व्हाइटस्पेस को ट्रिम करना)। इस बेला देखें: http://jsfiddle.net/uD48E/1/

$('.a') 
    .filter(function(index){ 
     return $(this).attr("class").trim() == "a"; 
    }) 
    .hide(); 

प्रश्न की तरह यह है कि विशिष्ट दृष्टिकोण अधिक भंगुर है और अधिक "भविष्य सबूत" कोड बनाने की कोशिश कर रहा है, लेकिन लग रहा है। उन सभी वर्गों को अस्वीकार करना जो आपके द्वारा फ़िल्टर किए जा रहे मौजूदा वर्ग से संबंधित नहीं हैं, कारण a से संबंधित नहीं हैं (जैसे एक असंबंधित वर्ग d या e जो बाद में जोड़े जाते हैं)। यह महत्वपूर्ण है यदि आप जिस HTML को अपना jQuery लागू कर रहे हैं उसे भविष्य में बदला जा सकता है।

ऐसा करने का एक बेहतर तरीका केवल कक्षाओं को फ़िल्टर करना है जो वर्ग a के अर्थ को प्रभावित करते हैं। उस तरह की लचीलापन के लिए अनुमति देना वास्तव में आपके कोड को भविष्य के सबूत बनाता है। ऐसा करने के सर्वोत्तम तरीके के लिए maxedison's answer देखें।

1

एक और तरीका कक्षाओं को हटा रहा है और फिर यह देखने के लिए जांच कर रहा है कि कोई वर्ग रहता है या नहीं। ओपी को

JS Fiddle

$('.a').each(function() { 
    var $this = $(this); 
    if (!$this.removeClass('a').attr('class').length) { 
     //Execute function here 
    } 
}); 
संबंधित मुद्दे