繁体   English   中英

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

[英]Escaping square brackets in element's name when using the Attribute Equals Selector

请考虑以下代码:

$('[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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM