2010-06-21 8 views
21

मैं बहुत तरह अद्वितीय आईडी के साथ कई तत्वों मिल गया है का पता लगाएंjQuery चयनकर्ता पर regex का उपयोग कर आईडी के आधार पर सभी तत्वों

$("#item-[.]+-top").each(function() { 
    $(this).hide(); 
}); 

मुझे नियमित अभिव्यक्तियों की अच्छी समझ नहीं है और मैं कुछ इनपुट की सराहना करता हूं, क्योंकि उपरोक्त गलत लगता है।

उत्तर

34

हैं आप regex के साथ इस कर रहे थे, अभिव्यक्ति बस होगा:

item-\d-top 

कहाँ \d किसी भी एकल अंक (0..9) इंगित करता है, और अन्य पात्रों कोई विशेष अर्थ नहीं (इसलिए शाब्दिक के रूप में माना जाता है)।

हालांकि, jQuery में वर्तमान में रेगेक्स फ़िल्टर नहीं है (केवल प्रारंभ/अंत/युक्त/आदि जैसी चीज़ें) - इसलिए आपको अपना स्वयं का बनाना होगा (जो संभव है, लेकिन यदि आप इस पर विचार कर रहे थे कि आपको चाहिए रुकें और विचार करें कि आप फ़िल्टर क्यों कर रहे हैं और क्यों समझते हैं कि पहले कोई बेहतर तरीका है)।

कक्षा बनाने के लिए बहुत आसान होगा (serg555 सुझाता है), क्योंकि यह ठीक है कि आप इन वस्तुओं का इलाज कैसे कर रहे हैं।

या (यदि आप वर्ग को जोड़ने के लिए मार्कअप को बदल नहीं सकते) तो मौजूदा फ़िल्टर का उपयोग g.d.d.c's answer पर विस्तार, मैं क्या कर सकता है:

$('div[id^=item-][id$=-top]').hide() 

(जब से तुम सिर्फ के साथ समाप्त होने से अधिक आइटम हो सकता है 'शीर्ष', या तो अभी या भविष्य में, आप अनजाने में अन्य बातों के छुपा से बचने के लिए और अधिक विशिष्ट होने की जरूरत है तो।)

+0

धन्यवाद पीटर/सेर्ग 555। मैंने ऊपर की कोशिश की और यह एक इलाज किया। यह जिज्ञासा का मामला है लेकिन जैसा कि serg555 सुझाव देता है, एक वर्ग का उपयोग करना बहुत आसान होगा। फिर से धन्यवाद! –

+0

आइटम- \ d-top काम नहीं करता है। – podarok

+4

"काम नहीं करता" काम नहीं करता है। –

6

मैं उन्हें item जैसे कुछ वर्ग निर्दिष्ट करता हूं और फिर इस कक्षा $(".item") द्वारा एक खोज करता हूं।

8

तो आईडी किया गया था, news-top-1 तरह news-top-2, news-top-3 कुछ, news-top-4 आदि तो चयनकर्ताओं की मदद की है | आप।

http://api.jquery.com/attribute-starts-with-selector/

$.each($("input[name^='news-top-']"), function() { 
    alert($(this).hide()); 
}); 
3

जेम्स Padolsey एक अद्भुत filter regex चयन के लिए इस्तेमाल किया जा करने की अनुमति देता है कि बनाया।

jQuery.expr[':'].regex = function(elem, index, match) { 
    var matchParams = match[3].split(','), 
     validLabels = /^(data|css):/, 
     attr = { 
      method: matchParams[0].match(validLabels) ? 
         matchParams[0].split(':')[0] : 'attr', 
      property: matchParams.shift().replace(validLabels,'') 
     }, 
     regexFlags = 'ig', 
     regex = new RegExp(matchParams.join('').replace(/^s+|s+$/g,''), regexFlags); 
    return regex.test(jQuery(elem)[attr.method](attr.property)); 
} 

अब आप उपयोग कर सकते हैं

$('div:regex(id,item-[0-9]-top)').hide() 
0

एक ऐसी ही समस्या मारो और पसंद/बजाय लेकिन फिर वर्ग बनाने क्योंकि मैं ऐसे तत्वों पर एक से अधिक आपरेशन कर रहा था की upvoted serg का जवाब, Keyed Collections अधिक उपयुक्त थे।

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