0

我需要通过 id 正则表达式获取一些元素。我为该来源找到了一些解决方案:

jQuery.expr[':'].regex = function(elem, index, match) {
    var matchParams = match[3].split(','),
        validLabels = /^(data|css):/,
        attr = {
            method: matchParams[0].match(validLabels) ? 
                        matchParams[0].split(':')[0] : 'attr',
            property: matchParams.shift().replace(validLabels,'')
        },
        regexFlags = 'ig',
        regex = new RegExp(matchParams.join('').replace(/^\s+|\s+$/g,''), regexFlags);
    return regex.test(jQuery(elem)[attr.method](attr.property));
}

每个人都声称它工作正常,但是当我尝试运行简单的代码时,$(':regex[id,^node\-[0-9]+\-[0-9]+$]')我在 match[3].split 上收到错误,说该方法不存在。事实上,我在这个函数的第一行添加了 console.log(match) ,我得到了:

[":regex", "regex", undefined, undefined, index: 0, input: ":regex[id,^node-[0-9]+-[0-9]+$]"]

我做错了什么?

4

1 回答 1

2

您已使用[]而不是()指定正则表达式

$(':regex(id,^node\-[0-9]+\-[0-9]+$)')

演示:小提琴

我还建议将它与其他一些更快的选择器一起使用,例如类选择器或元素选择器,或者至少使用属性存在过滤器,例如 $('[id]:regex(id,^node-[0-9 ]+-[0-9]+$)')

于 2013-10-09T07:31:50.033 回答