2012-01-10 221 views
3

使用正則表達式我有HTML頁面上的幾個元素,我叫他們通過JavaScript這樣的:jQuery的元素選擇

$('#element_1_value') 
$('#element_2_value') 
$('#element_3_value') 
$('#element_4_value') 
$('#element_5_value') 
..... 

現在我要爲所有的元素一個單一的點擊事件。我如何通過正則表達式來做到這一點。

+0

你應該爲所有這些元素使用一個類 – 2012-01-10 06:58:20

+0

這可能是以下的一個副本: http:// stackoverflow。COM /問題/ 190253/jQuery的選擇正則表達式 – 2012-01-10 06:58:23

回答

17

這裏有四種不同的方式來解決這個問題:

選項#1:你可以把他們都變成一個選擇:

$("#element_1_value, #element_2_value, #element_3_value, #element_4_value, #element_5_value").click(function() { 
    // your code here 
}) 

選項#2:更妙的是給所有人分配一個通用類:

<div id="element_1_value" class="valueCommon"> 
<div id="element_2_value" class="valueCommon"> 
... 

然後用這個:

$(".valueCommon").click(function() { 
    // your code here 
}) 

選項#3:它也可以寫什麼ID的開始和一個給定的字符串結尾選擇,但我不會推薦,因爲它需要的選擇器引擎在檢查每一個對象有一個id屬性,是不是做事情的最快方法頁:

$("[id^='element_']").filter("[id$='_value']").click(function() { 
    // your code here 
}) 

第4個選項:我不知道對正則表達式的任何內置的jQuery支持中選擇匹配。你可以使用一個過濾器函數,任何javascript可以檢查和對象決定它是否匹配,但唯一的方法使用正則表達式將需要創建一個jQuery對象的頁面中的所有對象與id然後運行每個過濾器。這可以起作用,但肯定不是最有效的做事方式。使用通用類允許瀏覽器比正則表達式過濾器優化您的查詢。

甲正則表達式匹配是這樣的:

$("[id]").filter(function() { 
    return(this.id.match(/element_\d+_value/) != null); 
}); 

這產生在包含了id屬性的頁面的所有對象的jQuery對象和然後比較每一個以正則表達式,除去沒有按」的任何元素t匹配。正如我前面所說,我不會因性能原因而推薦這種方法。

+0

有很多因素,不僅5 – 2012-01-10 06:55:10

+0

在這種情況下,只是將類分配給所有的人,並使用'喜歡在回答中提到.'選擇。 – techfoobar 2012-01-10 06:57:24

+0

類是另一種選擇,,但沒有任何辦法使用正則表達式 – 2012-01-10 06:59:57

1

你爲什麼不使用,而不是ID? 例如:以上所有元素都有 「your_class_name」 類,和你有什麼要的是:

$(".yourclass_name").click(function() { 
    // do it your-self 
}); 
+0

類是另一種選擇,,但沒有任何辦法使用正則表達式 – 2012-01-10 06:59:34

+0

使用本機類和ID獲得更好的性能 – 2012-01-10 07:02:20

3

您可以使用啓動與選擇:

$('div[id^="element_"]').each(function() 
{ 
    alert("clicked!"); 
}); 

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

+0

它不僅與element_開始,而且必須與_value – 2012-01-10 06:58:36

+0

結束時,我會與別人同意你」重新使用課程可能會更好。我可以看到使用正則表達式的唯一方法是遍歷每個元素,這顯然不是一個好的解決方案 – dearlbry 2012-01-10 07:03:26