我需要在代码中选择一个与类名中的字符串+数字匹配的属性,使用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/");
});
你有更好的建议吗?
感谢。
答案 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]'
)。