查找

2010-06-21 43 views
21

我有獨特的IDS幾個元素,像這樣基於使用jQuery的選擇正則表達式ID的所有元素:我希望下面將工作使用jQuery查找

<div id='item-1-top'></div> 
<div id='item-2-top'></div> 
<div id='item-3-top'></div> 

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

我對正則表達式沒有很好的理解,因此我將不勝感激,因爲上述內容似乎不正確。

回答

34

如果你用正則表達式這樣做,表情,簡直是:

item-\d-top 

\d表示任何一個數字(0..9)和其他字符沒有特殊的意義(所以被視爲文字)。但是,jQuery目前沒有正則表達式過濾器(只有像start/end/contains/etc這樣的東西) - 所以你將不得不創建你自己的過濾器(這是可能的,但如果你正在考慮你應該停下來考慮一下你爲什麼要過濾,然後弄清楚是否有更好的方法)。

更簡單的是創建一個類(如serg555建議),因爲這正是你如何對待這些項目。

或者(如果你不能改變的標記添加類),然後使用現有的過濾器,擴大對g.d.d.c's answer,我可能會做:

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

(因爲你可能有多個項目與剛結束「頂」,無論是現在還是將來,所以你需要更具體,以避免無意中在其他的東西。)

+0

感謝Peter/serg555。我嘗試了上面的例子。它工作的一種享受。這更多的是一種好奇心,但serg555表明,使用一個類會簡單得多。 再次感謝! – 2010-06-22 07:43:36

+0

item- \ d-top 不起作用。 「 – podarok 2015-02-02 13:43:26

+4

」不起作用「不起作用。 – 2015-03-02 22:39:53

6

我會給他們分配一些類,如item,然後通過這個類$(".item")進行搜索。

3

詹姆斯Padolsey創造一個美好的filter允許用於選擇正則表達式。

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更適合。