【问题标题】:jQuery regex selector doesn't workjQuery 正则表达式选择器不起作用
【发布时间】:2013-10-09 15:31:50
【问题描述】:

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

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]+$]"]

我做错了什么?

【问题讨论】:

  • “我需要通过 id 正则表达式获取一些元素。” – 你能更具体一点吗?
  • 这里有什么不清楚的地方?我有与特定模式匹配的 id 元素,需要使用 jquery 访问它...

标签: jquery regex jquery-selectors


【解决方案1】:

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

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

演示:Fiddle

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

【讨论】:

  • 我知道这不是很有效,但在这种特定情况下,它对我来说是最好的方法。
猜你喜欢
  • 2010-09-16
  • 1970-01-01
  • 1970-01-01
  • 2012-03-07
  • 2012-06-12
  • 2012-05-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多