通缉:jQuery选择器,中间有可变部分

时间:2011-05-10 11:19:14

标签: 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>

我想要一个选择器来选择看起来像$('div[id=Kees_{any number}_test]')的div。我怎样才能做到这一点?


注意:ID由Asp.Net生成。

2 个答案:

答案 0 :(得分:13)

试试这个:

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

该选择器会选择所有包含以Kees_开头且以_test结尾的ID的元素。

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

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

这应该和它一样好。请注意,我向正则表达式添加了^$,这将在Kees_123_test_foo等ID上返回false,但Kees_123_test次传递。

答案 1 :(得分:7)

最好的解决方案是给所有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>

选择器:

$('div.Kees_test');

如果无法做到这一点,最明确的方法是使用filter

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

\d+表示“选择一个或多个号码”。