为什么我不能在jQuery中使用这个正则表达式过滤器来选择这个输入字段?

时间:2015-05-09 00:13:34

标签: javascript jquery regex

所以我使用padolsey's regex filter尝试选择动态生成的嵌套表单字段。为什么我一直在下面的选择器代码中为 test 获取一个空值?

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));
}

//selector code
$(document).ready(function() { 
    var test = $('input:regex(id, agreement_activities_attributes_\d*_id)');
    console.log(test);
});

包含输入字段的html代码我试图选择

<input id="agreement_activities_attributes_0_id" name="agreement[activities_attributes][0][id]" type="hidden" value="28" />

1 个答案:

答案 0 :(得分:2)

代码中有错误。

.replace(/^s+|s+$/g,'')

应该是

.replace(/^\s+|\s+$/g,'')

然后它应该工作。

替换删除任何周围的空格(修剪字符串)。您在选择器中使用的空间(:regex(id, agreement_activities_attributes_\d*_id))将包含在匹配模式中,因此仅匹配id以空格开头的元素。