Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用正则表达式(或其他东西)的jQuery选择器_Javascript_Jquery_Regex - Fatal编程技术网

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

Javascript 使用正则表达式(或其他东西)的jQuery选择器,javascript,jquery,regex,Javascript,Jquery,Regex,我需要使用jQuery在代码中选择与类名中的字符串+数字匹配的属性 我需要做的是匹配这样的东西: var myVar = 'item'; $('#id [class="'+myVar+'\d+"]'); 我的代码也包含以item开头的其他类,因此我不能使用选择器类^=item 我在网上发现了不同的东西,但没有一件完全符合我的要求 我找到了jQuery扩展名:regex,但不允许我使用它 我发现使用过滤器作为一个函数,但这对性能来说是可怕的 我试着做点什么,但都没用: $('#id *').f

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

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

var myVar = 'item';
$('#id [class="'+myVar+'\d+"]');
我的代码也包含以item开头的其他类,因此我不能使用选择器类^=item

我在网上发现了不同的东西,但没有一件完全符合我的要求

我找到了jQuery扩展名:regex,但不允许我使用它

我发现使用过滤器作为一个函数,但这对性能来说是可怕的

我试着做点什么,但都没用:

$('#id *').filter(function() {
   return this.className.match("/"+myVar+"\d/");
});
你有更好的建议吗

谢谢。

不,您不能将\d与CSS/jQuery选择器一起使用

我建议您将数字拆分为另一个属性,如数据编号或其他内容。通过这种方式,您可以轻松有效地确定类的目标,并且仍然有可用的数量

<span class="my-class" data-number="1"></span>
<span class="my-class" data-number="6"></span>
<span class="my-class" data-number="10"></span>
正如@Asad所提到的,它们也可以使用$'来选择。我的类[数据编号=1]。

如何:

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

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


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

您需要使用正则表达式这一事实对性能来说是可怕的,并且表明设计不好。过滤器可以尽可能好,但选择器*是速度慢的原因。您可以更改类名吗?例如,不要使用item1234,而是将其称为item_1234,意思是后面跟着一个数字。我认为最简单的方法是使用ren将这些项目的类命名为不是页面上另一个类前缀的类,或向其添加其他类。然后可以使用选择器[class^='yourNewClassPrefix']或者,如果您添加了一个额外的类,则只需一个普通的类选择器。这将比任何需要正则表达式的设计都要快得多,而且更好。@Christophe比我的答案快了10秒:很遗憾,我无法重命名类……然后可以使用.my class[data number=n]选择这些类,其中n是您所需的数字。
$('#id [class*=' + myVar + ']').filter(function() {
   return this.className.match(new RegExp('(^|\\s)' + myVar + '\\d+(\\s|$)'));
});