带有数组表示法的复杂输入名称的jquery通配符

时间:2013-05-17 21:15:22

标签: jquery

我有text类型的复杂输入元素,其名称类似于product[1][combinations][x][price]。这个元素有很多,名称的区别仅在于[combinations]之后和[x]之后的值。

例如:

product[1][price]
product[1][combinations][x][price]
product[1][combinations][xx][price]
product[1][combinations][xxx][price]
product[1][combinations][xxxx][price]

product[1][sale_price]
product[1][combinations][x][sale_price]
product[1][combinations][xx][sale_price]
product[1][combinations][xxx][sale_price]
product[1][combinations][xxxx][sale_price]

product[2][price]
product[2][combinations][a][price]
product[2][combinations][aa][price]
product[2][combinations][aaa][price]
product[2][combinations][aaaa][price]

product[2][sale_price]
product[2][combinations][a][sale_price]
product[2][combinations][aa][sale_price]
product[2][combinations][aaa][sale_price]
product[2][combinations][aaaa][sale_price]

上述值xxxxxxxxxxaaaaaa,{{ 1}}代表每aaaa的唯一值。每个组中的第一个定义(例如product[id])表示父级或所有者产品的值,我将批量更新为其子组(组合)。

我想根据存储的信息类型找到这些元素的组,例如product[2][sale_price],然后更改其值。我不需要考虑唯一值sale_price所以我希望我可以使用通配符。

我希望这样的事情可以解决问题(例子):

[x]

然而,我猜$("input[name='product[1][combinations][*][price]'][type='text']").val(0); 并不是真正的通配符,所以我不能那样使用它。

我意识到我可以做这样的事情,但是这会将*分配给所有输入而不只是0

sale_price

如何用适当的外卡替换此($("input[name^='product[1][combinations]'][type='text']").val(0); )选择器?如果可能的话,我想保持名称数组值的顺序相同

2 个答案:

答案 0 :(得分:5)

不确定这是否是你想要的......但是你可以使用带有$的属性选择器来选择以指定文本结尾的所有输入......所以这将是

$("input[name$='[price]']").val(0);
$("input[name$='[sale_price]']").val(1);

并且您实际上不需要[type='text']上面的选择器将获得名称以字符串结尾的元素...但是如果您想要更具体并且确保您只需要输入,那么它很好......你也可以在这里添加相同的内容。

example fiddle here

<强>更新

然后你可以使用多个属性选择器.. ^来搜索以指定字符串开头的元素

$("input[name^='product[1]'][name$='[price]']").val(0);
$("input[name^='product[1]'][name$='[sale_price]']").val(1);

updated fiddle

答案 1 :(得分:3)

您可以使用多个属性选择器:

$("input[name^='product[" + number + "]'][name$='[sale_price]']").val(0);

http://jsfiddle.net/QsVnR/