jQuery选择器,用于在name属性中带有方括号的输入


179

我试图选择在name属性中具有方括号的此元素:

<input type="text" name="inputName[]" value="someValue">

我已经试过了(不起作用):

$('input[inputName[]=someValue]')

而且这也不是:

$('input[inputName&#91;&#93;=someValue]')

或这个:

$('input["inputName[]"=someValue]')

编辑:正如你们中某些人指出的那样,$('input[inputName=someValue]')它将永远无法工作。我正在尝试做的是:$('input[name=inputName][value=someValue]')。(但是[]在name属性中)。

Answers:


262

根据jQuery文档,请尝试以下操作:

$('input[inputName\\[\\]=someValue]')

[EDIT]但是,我不确定这是您选择器的正确语法。您可能想要:

$('input[name="inputName[]"][value="someValue"]')

32
接得好。需要两个反斜杠的原因是因为单个反斜杠被解释为JavaScript字符串转义字符,所以您需要两个反斜杠来指定文字反斜杠,从而为选择器提供转义字符...啊,多层次字符的乐趣转义。
彼得

谢谢你 这只是使用正则表达式的问题。将表单数据直接提交到您喜欢的视图框架内的数组或列表时,这非常有用。这也帮助我回答了有关删除具有多个主键元素的对象的问题。;)
LuizFeijãoVeronesi 2014年

79

您可以使用反斜杠在jQuery选择器中引用“有趣”字符:

$('#input\\[23\\]')

对于属性值,可以使用引号:

$('input[name="weirdName[23]"]')

现在,您的榜样让我有些困惑;您的HTML到底是什么样的?字符串“ inputName”特别显示在哪里?

编辑固定的商机;谢谢@Dancrumb


1
我不能够选择(巧合的是一个选择标签)<select name="foo[bar]">使用$('select[name=foo\\[bar\\]]'),但是我能够做到这一点使用$('select[name="foo[bar]"]),你的第二个建议。
Frank Nocke 2013年

53

属性选择器语法为[name=value]where name是属性名称和value属性值。

因此,如果要选择input属性name值为以下值的所有元素inputName[]

$('input[name="inputName[]"]')

如果要检查两个属性(在此处:namevalue):

$('input[name="inputName[]"][value=someValue]')

7

如果选择器包含在变量中,则以下代码可能会有所帮助:

selector_name = $this.attr('name');
//selector_name = users[0][first:name]

escaped_selector_name = selector_name.replace(/(:|\.|\[|\])/g,'\\$1');
//escaped_selector_name = users\\[0\\]\\[first\\:name\\]

在这种情况下,我们为所有特殊字符加上双反斜杠前缀。


1
selector.replace(/([[]] / g,'\\\\ $ 1'); 对我来说效果更好一些,因为它增加了转义斜线并产生两个而不是一个转义斜线...
Fydo

@Fydo只是记住,您还需要转义一些其他字符,包括冒号,句号
Eric Kigathi 2014年

1

只需用不同的引号将其分开:

<input name="myName[1][data]" value="myValue">

jQuery的:

var value = $('input[name="myName[1][data]"]').val();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.