Javascript 通缉:中间变量部分的jQuery选择器

Javascript 通缉:中间变量部分的jQuery选择器,javascript,jquery,asp.net,html,jquery-selectors,Javascript,Jquery,Asp.net,Html,Jquery Selectors,考虑以下HTML: <div id="Kees_1_test">test 1</div> <div id="Kees_12_test">test 2</div> <div id="Kees_335_test">test 3</div> 测试1 测试2 测试3 我想要一个选择器来选择看起来像$('div[id=Kees{anynumber}\u test')的div。我怎样才能做到这一点 注意:ID是由Asp.Net生成

考虑以下HTML:

<div id="Kees_1_test">test 1</div>
<div id="Kees_12_test">test 2</div>
<div id="Kees_335_test">test 3</div>
测试1
测试2
测试3
我想要一个选择器来选择看起来像
$('div[id=Kees{anynumber}\u test')的div
。我怎样才能做到这一点


注意:ID是由Asp.Net生成的。

请尝试以下操作:

$('div[id^=Kees_][id$=_test]')
该选择器选择ID以
Kees\u
开头,以
\u test
结尾的所有元素

正如lonesomeday所建议的,您可以使用
.filter()
确保中间部分只包含数字。您可以将
.filter()
与上述示例结合使用:

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

这应该是最好的了。请注意,我在正则表达式中添加了
^$
,这将在id上返回false,例如
Kees_123_test_foo
,但
Kees_123_test
通过。

最好的解决方案是给所有div一个类并使用一个类选择器:

<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>
如果不可能,最清晰的方法是使用:


\d+
表示“选择一个或多个数字”。

很好!有没有办法阻止id为Kees\u t3t\u test的div匹配?那么我可以强制中间部分是一个数字吗?我喜欢合并两个[]语句的想法。我不知道那个!:-)
.filter()
函数将帮助您实现这一点-它将确保两个下划线之间只能有
\d
(数字)字符。如果取消它,我的50行代码将随之消失。很好,也许我们可以将答案结合起来以提高性能。正在做一个
$('div[id^=Kees_quo;]).filter(…)
也许?@Kees是的,你可以。如果可能的话,在这里使用一门课肯定是最好的答案。我会先去上一门课。这是对元素进行分组的自然方式。但是,如果不想添加额外的属性,可以先查找父元素。类方法使它更易于传输。@5arx
按ID获取它们比按类获取快得多。
但在这种情况下,获取ID要慢得多,因为它必须扫描整个页面,查找以X开头的属性,而不是遍历该集合,并检查是否以Y结尾。在这种情况下,按类获取ID是100%更好。
$('div.Kees_test');
$('div[id^="Kees_"]').filter(function() {
    return /Kees_\d+_test/.test(this.id);
});