jQuery选择器使用正则表达式(或其他)

时间:2013-10-11 17:04:10

标签: javascript jquery regex

我需要在代码中选择一个与类名中的字符串+数字匹配的属性,使用jQuery

我需要做的是匹配这样的东西:

var myVar = 'item';
$('#id [class="'+myVar+'\d+"]');

我的代码也包含以“item”开头的其他类,因此我无法使用选择器class^="item"

我在互联网上发现了不同的东西,但没有任何东西完全符合我的要求。

我发现jQuery扩展名为“:regex”,但我不允许使用它。 http://james.padolsey.com/javascript/regex-selector-for-jquery/

我发现使用“过滤器”作为功能,但这对性能来说太可怕了 jQuery filter selector, is this right?

我尝试做某事,但它甚至没有工作:

$('#id *').filter(function() {
   return this.className.match("/"+myVar+"\d/");
});

你有更好的建议吗?

感谢。

2 个答案:

答案 0 :(得分:2)

不,你不能将\d用于CSS / jQuery选择器。

我建议您将数字拆分为另一个属性,例如data-number或其他属性。通过这种方式,您可以轻松有效地定位课程,并且仍然可以使用该数字。

<span class="my-class" data-number="1"></span>
<span class="my-class" data-number="6"></span>
<span class="my-class" data-number="10"></span>

jQuery示例

$.each($('my-class'), function () {
    $(this).attr('data-number');
});

正如@Asad所提到的那样,也可以使用$('.my-class[data-number="1"]')选择它们。

答案 1 :(得分:1)

怎么样:

$('#id [class*=' + myVar + ']').filter(function() {
   return this.className.match(new RegExp('(^|\\s)' + myVar + '\\d+(\\s|$)'));
});

<强> Check jsfiddle demo here

选择器在类名中选择#id的每个后代元素myVar。最后,它会过滤掉它们,只留下那些myVar后跟一个或多个数字的人作为其中一个类的名称。

注意:您可能知道这一点,但无论如何都值得警告:您必须阻止myVar具有对选择器具有特殊含义的字符(这会使{ {1}}选择器)和to regexes(例如字符串[class*=' + myVar + ']',这将使正则表达式匹配范围而不是文字'[a-z]' - 在这种情况下,它应该被转义,如'[a-z]')。