名称属性中带有方括号的输入的 jQuery 选择器
Posted
技术标签:
【中文标题】名称属性中带有方括号的输入的 jQuery 选择器【英文标题】:jQuery selector for inputs with square brackets in the name attribute 【发布时间】:2011-01-22 19:50:16 【问题描述】:我正在尝试选择 name 属性中有方括号的元素:
<input type="text" name="inputName[]" value="someValue">
我试过这个(不起作用):
$('input[inputName[]=someValue]')
这也不是:
$('input[inputName[]=someValue]')
或者这个:
$('input["inputName[]"=someValue]')
编辑:正如你们中的一些人指出的那样,$('input[inputName=someValue]')
永远不会起作用。我想做的是:$('input[name=inputName][value=someValue]')
。 (但名称属性中带有[]
)。
【问题讨论】:
【参考方案1】:属性选择器语法为[name=value]
,其中name
是属性名称,value
是属性值。
因此,如果您要选择属性为 name
且值为 inputName[]
的所有 input
元素:
$('input[name="inputName[]"]')
如果你想检查两个属性(这里:name
和 value
):
$('input[name="inputName[]"][value=someValue]')
【讨论】:
【参考方案2】:您可以在 jQuery 选择器中使用反斜杠来引用“有趣”的字符:
$('#input\\[23\\]')
对于属性值,您可以使用引号:
$('input[name="weirdName[23]"]')
现在,我对您的示例感到有些困惑;您的 html 到底是什么样的?字符串“inputName”具体出现在哪里?
edit 修复了虚假;谢谢@Dancrumb
【讨论】:
我无法使用$('select[name=foo\\[bar\\]]')
选择(巧合的是选择标签)<select name="foo[bar]">
,但是我am 能够使用$('select[name="foo[bar]"])
来选择,这是您的第二个建议。
这个答案应该在顶部。它最简单。交换引号,它对我有用。谢谢【参考方案3】:
根据jQuery documentation,试试这个:
$('input[inputName\\[\\]=someValue]')
[编辑] 但是,我不确定这是否适合您的选择器。你可能想要:
$('input[name="inputName[]"][value="someValue"]')
【讨论】:
好收获。需要两个反斜杠的原因是因为一个反斜杠被解释为一个javascript字符串转义字符,所以你需要两个来指定一个文字反斜杠,它为选择器提供转义字符......啊,多级字符的乐趣逃跑。 谢谢你。这只是使用正则表达式的问题。这在将表单数据直接提交到您喜欢的视图框架中的数组或列表时非常有用。这也帮助我回答了有关删除具有多个主键元素的对象的问题。 ;)【参考方案4】:如果选择器包含在变量中,下面的代码可能会有所帮助:
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\\]
在这种情况下,我们在所有特殊字符前加上双反斜杠。
【讨论】:
selector.replace(/([|])/g,'\\\\$1');对我来说工作得更好一点,因为它添加了转义斜杠并产生两个,而不是一个转义斜杠...... @Fydo 请记住,您还需要转义其他一些字符,包括冒号、句点【参考方案5】:只需用不同的引号将其分开:
<input name="myName[1][data]" value="myValue">
JQuery:
var value = $('input[name="myName[1][data]"]').val();
【讨论】:
以上是关于名称属性中带有方括号的输入的 jQuery 选择器的主要内容,如果未能解决你的问题,请参考以下文章