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



请考虑以下代码:

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

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

为了使它起作用,我知道我应该转义表单字段名称中的方括号。但是,由于我是正则表达式的新手,我似乎无法正确处理。谁能为我提供正确的代码?非常感谢。

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

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

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

如果你真的想使用正则表达式,下面就足够了(故意使用一行来表明短代码并不总是可读的):

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

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

上述

问题最好通过上述"正则表达式"替换来解决,但是,如果您只是尝试访问如下所示的静态命名元素,那么这是您的简单指南:

<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>

最新更新