2012-01-10 193 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