2011-05-10 4 views
8

aşağıdaki HTML düşünün:Aranıyor: değişken parça ile jQuery seçimi orta

<div id="Kees_1_test">test 1</div> 
<div id="Kees_12_test">test 2</div> 
<div id="Kees_335_test">test 3</div> 

Ben $('div[id=Kees_{any number}_test]') benziyor div'leri seçen bir seçici istiyorum. Bunu nasıl başarabilirim?


Not: Kimlikler Asp.Net tarafından oluşturulur.

cevap

12

bu deneyin:

$('div[id^=Kees_][id$=_test]') 

seçici Kees_ ile başlayıp _test ile sona kimlikleri tüm öğeleri seçer o. lonesomeday önerildiği gibi

, sen orta kısmı sadece sayılar içerdiğinden emin olmak için .filter() kullanabilirsiniz. Yukarıdaki örnekle .filter() birleştirebilirsiniz:

alır gibi yaklaşık olarak iyi gerektiği
$('div[id^=Kees_][id$=_test]').filter(function() { 
    return /^Kees_\d+_test$/.test(this.id); 
}); 

. Ben regex için ^$ eklendi unutmayın, bu kimliği 'gibi Kees_123_test_foo da ancak Kees_123_test geçerken yanlış dönecektir.

+0

Güzel! Kees_t3t_test' kimliğine sahip bir div için bir maçı engellemenin bir yolu var mı? Orta kısmı bir sayı olarak zorlayabilir miyim? –

+0

İki [] ifadeyi birleştirme fikrini sevin. Bunu bilmiyordum! :-) –

+0

'.filter()' işlevi sizi oraya götürecek - bu yalnızca iki alt çizgi arasında "\ d" (basamak) karakterlerinin olmasını sağlayabilir. –

7

iyi çözüm bir sınıf seçici tüm divs bir sınıf vermek ve kullanmak olacaktır:

<div id="Kees_1_test" class="Kees_test">test 1</div> 
<div id="Kees_12_test" class="Kees_test">test 2</div> 
<div id="Kees_335_test" class="Kees_test">test 3</div> 

Seçici:

$('div.Kees_test'); 

bu mümkün değilse, en okunaklı yolu olur filter kullanmaktır:

$('div[id^="Kees_"]').filter(function() { 
    return /Kees_\d+_test/.test(this.id); 
}); 

\d+ anlamına gelen "seçeneğini bir veya daha fazla sayı ".

+0

Güzel, belki daha iyi performans cevaplarını birleştirebilirsiniz. Bir '$ Amaçlı ('div [id^= Kees _]'). filtre (...)' belki? –

+0

@Kees Evet, yapabilirsin. Muhtemelen makul bir fark yaratacaktır. – lonesomeday

+0

1: kesinlikle bir sınıfını kullanan burada eğer mümkünse iyi cevaptır. – Spudley