使用属性等于选择器时,在元素名称中转义方括号

时间:2012-04-08 14:11:40

标签: javascript jquery regex

请考虑以下代码:

$('[name='+temp[i][0]+']').prev().addClass('form_error');

其中temp [i] [0]是一个数组项,其中包含一个包含方括号的表单字段的名称(因为它表示一个复选框数组),name_of_field[]

为了实现这一点,我知道我应该从表单字段的名称中删除方括号。但是,由于我是正则表达式的新手,我似乎无法做到正确。任何人都可以提供正确的代码吗?非常感谢。

2 个答案:

答案 0 :(得分:3)

只需引用该值,然后转义引号:

var name = temp[i][0];
name = name.split('"').join('\\"');                   // Escaped " is \\"
$('[name="'+name+'"]').prev().addClass('form_error');

这也会考虑其他有效名称,但选择字符无效,例如$

如果您真的想使用RegEx,以下就足够了(故意使用单行显示短代码并不总是可读):

$('[name="' + temp[i][0].replace(/"/g, '\\"') + '"]').prev().addClass('form_error');
//            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

答案 1 :(得分:0)

我想我可能会澄清一下,因为我无疑会再次回到这个问题。

上述'正则表达式可以最好地解决上述问题。但是,如果您只是尝试访问下面的静态命名元素,那么这是您的简单指南:

<input type="text" name="mytextelement[]" />
<input type="text" name="mytextelement[]" />

<script>
//using vanilla javascript

document.querySelector('[name="mytextelement\[\]"]'); //gets the first element only

document.querySelectorAll('[name="mytextelement\[\]"]'); //gets an array of above elements

//using jQuery

$('[name="mytextelement\[\]"]'); //gets all elements

<script>