2010-02-01 14 views
121

पर चयनकर्ता 'से शुरू होता'उपयोग व्यक्ति वर्ग के नाम

$("div[class^='apple-']") 

हालांकि, अगर मैं के बाद से पहली div के वर्ग एक स्ट्रिंग (मुझे लगता है कि) के रूप में लौट आए और ऐसा नहीं करता है,

<div class="some-other-class apple-monkey"></div> 
<div class="apple-horse"></div> 
<div class="cow-apple-brick"></div> 

यह केवल दूसरा dIV मिलेगा: इस राशि वास्तव में साथ 'सेब' बल्कि 'लिए-'

एक तरह से शुरू है कि चारों ओर के साथ शुरू होता है का उपयोग नहीं करने के लिए है, लेकिन इसके बजाय शामिल हैं:

$("div[class*='apple-']") 

उस के साथ समस्या यह भी 3 का चयन करेंगे मेरे उदाहरण में डीआईवी।

प्रश्न: jQuery के माध्यम से, एक वर्ग के रूप में संपूर्ण वर्ग विशेषता के बजाय व्यक्तिगत वर्ग नामों पर अनुमानित चयनकर्ताओं का उपयोग करने का उचित तरीका क्या है? क्या यह सिर्फ क्लास को पकड़ने की बात है, फिर इसे एक सरणी में विभाजित कर रहा है और फिर प्रत्येक व्यक्ति को रेगेक्स के साथ लूप कर रहा है? या क्या एक और अधिक सुरुचिपूर्ण/कम वर्बोज़ समाधान है?

उत्तर

231

वर्ग है कि "सेब" प्लस वर्गों के साथ शुरू करते हैं, जिनमें शामिल है "सेब"

$("div[class^='apple-'],div[class*=' apple-']") 
+4

+1। हालांकि मैं @parrots के सुझाव से सहमत हूं कि "सेब" यहां अपनी खुद की कक्षा होनी चाहिए, क्योंकि यह स्पष्ट रूप से एकाधिक divs को ओवरलैप करता है, फिर भी यह एक अलग इकाई है। लेकिन यह समस्या हल करता है। – jvenema

+0

हम्म ... चालाक! मैंने वहां जगह का उपयोग करने के बारे में सोचा नहीं था। क्या कोई एक jquery चयनकर्ता में बुलियन ऑपरेटर का उपयोग कर सकता है? आदर्श रूप से, उपर्युक्त (दुर्लभ और संभावित टालने योग्य) मामले से बचने के लिए उपरोक्त 'OR' होगा जहां 'सेब-' –

+0

के साथ एक से अधिक कक्षाएं हैं, मुझे यकीन नहीं है कि मैं समझता हूं, लेकिन यदि आप केवल दूसरे चयनकर्ता का उपयोग करना चाहते हैं पहला चयनकर्ता शून्य तत्व देता है, आप ऐसा कुछ कर सकते हैं: 'var divs = $ (" div [class^= 'apple-'] "); अगर (divs.length == 0) divs = $ ("div [class * = 'apple -']"); ' –

10

मैं "सेब" को अपनी कक्षा बनाने की सलाह दूंगा। आपको शुरुआत के साथ/समाप्त होने से बचना चाहिए-अगर आप कर सकते हैं क्योंकि div.apple का उपयोग करने में सक्षम होना बहुत तेज़ होगा। यह अधिक सुरुचिपूर्ण समाधान है। चीजों को अलग-अलग वर्गों में विभाजित करने से डरो मत, अगर यह कार्य को सरल/तेज़ बनाता है।

+0

आप कैसे समझते हैं कि यह बहुत तेज़ होगा? इसे अभी भी पूरे डोम को स्कैन करना है और कक्षा विशेषता का मूल्यांकन करना है। यह मामूली तेजी से (सबसे अच्छा) होगा क्योंकि इसे कक्षा विशेषता को प्रतिस्थापित नहीं करना पड़ेगा। नगण्य। –

+1

http: // www।घटकगृह.com/article-19: यदि आप क्लास सेक्शन प्राप्त करते हैं, तो नियमित डॉट सिंटैक्स का उपयोग करके क्लास को एक विशेषता के रूप में इलाज करने से आमतौर पर थोड़ा सा तेज़ होता है। सबस्ट्रिंग खोज जोड़ें (और अतिरिक्त वर्ग के साथ तत्वों को तोड़ने के लिए उन्हें अतिरिक्त काम करना होगा) और यह एक सभ्य प्रदर्शन बचत में शामिल होगा। – Parrots

+0

मैं सहमत हूं। पकड़ यह है कि हम अभी भी आईई 6 का भारी समर्थन कर रहे हैं और यह सीएसएस में कंपाउंड चयनकर्ताओं का समर्थन नहीं करता है: .class1.class2.class3 इस तरह, हम लंबे वर्ग के नामों का उपयोग करने पर भरोसा कर रहे हैं जहां 'पैरामीटर' डैश द्वारा विभाजित होते हैं। –

2

इस प्रयास करें:

$("div[class]").filter(function() { 
    var classNames = this.className.split(/\s+/); 
    for (var i=0; i<classNames.length; ++i) { 
     if (classNames[i].substr(0, 6) === "apple-") { 
      return true; 
     } 
    } 
    return false; 
}) 
+0

इसके लिए धन्यवाद। यह मेरा झुकाव भी था - कि मुझे इसे खुद को विभाजित करना होगा। –

2
<div class="apple-monkey"></div> 
<div class="apple-horse"></div> 
<div class="cow-apple-brick"></div> 
सवाल जोश Stodola जवाब के रूप में इस मामले में

सही है कक्षाएं जो "सेब-" प्लस कक्षाओं से शुरू होती हैं जिनमें "सेब-"

$("div[class^='apple-'],div[class*=' apple-']") 

लेकिन इस

<div class="some-class apple-monkey"></div> 
<div class="some-class apple-horse"></div> 
<div class="some-class cow-apple-brick"></div> 

तो जोश Stodola के समाधान काम नहीं करते होगा अगर तत्व की तरह कई वर्गों है
इस के लिए इस

$('.some-parent-class div').filter(function() { 
    return this.className.match(/\bapple-/);// this is for start with 
    //return this.className.match(/apple-/g);// this is for contain selector 
}).css("color","red"); 

जैसे कुछ बात करने के लिए हो सकती है यह कुछ एक में मदद करता है अन्यथा धन्यवाद

2

यह

के साथ उपसर्ग के लिए है

यह इतना के साथ शुरू होता है के लिए है आप न करने की जरूरत है -

$("div[class|='apple']")

आप jQuery चयनकर्ता यहां https://api.jquery.com/category/selectors/

के अन्य शांत रूपों का एक गुच्छा पा सकते हैं वहाँ में चार ''
0

जबकि शीर्ष उत्तर यहां पूछने वाले के विशेष मामले के लिए एक कामकाज है, यदि आप वास्तव में व्यक्तिगत वर्ग के नामों पर 'शुरूआत' का उपयोग करने के लिए एक समाधान की तलाश में हैं:

आप इस कस्टम jQuery चयनकर्ता का उपयोग कर सकते हैं, जिसे मैं "ए क्लास उपसर्ग" के लिए :acp() पर कॉल करता हूं। कोड इस पोस्ट के नीचे है।

var test = $('div:acp("starting_text")'); 

यह किसी भी और सभी <div> तत्वों है कि कम से कम एक वर्ग के नाम वर्ग में दिए गए स्ट्रिंग ("starting_text" इस उदाहरण में), के साथ शुरुआत की है कि क्या उस वर्ग शुरुआत में है की परवाह किए बिना या कहीं और का चयन करेंगे विशेषता स्ट्रिंग्स।

$(function(){ 
    $.expr[":"].acp = function(elem, index, m){ 
      var regString = '\\b' + m[3]; 
      var reg = new RegExp(regString, "g"); 
      return elem.className.match(reg); 
    } 
}); 
:

<div id="1" class="apple orange lemon" /> 
<div id="2" class="orange applelemon banana" /> 
<div id="3" class="orange lemon apple" /> 
<div id="4" class="lemon orangeapple" /> 
<div id="5" class="lemon orange" /> 

var containsapp = $('div:acp("app")'); 

यह तत्वों 1, 2 वापस आ जाएगी, और 3, लेकिन नहीं 4 या 5

यहाँ :acp कस्टम चयनकर्ता, जो आप कहीं भी रख सकते के लिए घोषणा है

मैंने इसे इसलिए बनाया क्योंकि मैं उन वेबसाइटों की बहुत सारी GreaseMonkey हैकिंग करता हूं जिन पर मेरे पास कोई बैकएंड नियंत्रण नहीं है, इसलिए मुझे अक्सर कक्षा नाम वाले तत्वों को खोजने की आवश्यकता होती है जिनमें गतिशील प्रत्यय होते हैं। यह बहुत उपयोगी रहा है।

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