1

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

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

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

我的代码也包含以“item”开头的其他类,所以我不能使用选择器 class^="item"

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

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

我发现使用“过滤器”作为一个函数,但这对于性能 jQuery 过滤器选择器来说太可怕了,对吗?

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

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

你有更好的建议吗?

谢谢。

4

2 回答 2

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"]').

于 2013-10-11T17:16:56.413 回答
1

怎么样:

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

在此处查看 jsfiddle 演示

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

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

于 2013-10-11T17:25:30.410 回答