繁体   English   中英

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

[英]jQuery selector using regex (or something else)

我需要在代码中选择一个与类名中的字符串+数字匹配的属性,使用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/");
});

你有更好的建议吗?

谢谢。

不,你不能使用\\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"]')

怎么样:

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

在这里查看jsfiddle演示

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM