如何选择名称数组中的所有元素?

时间:2014-03-10 19:20:00

标签: javascript jquery jquery-selectors

我正在尝试使用jQuery对一组无线电选择进行总结。

<input name="cost[alpha]" type="radio" >
<input name="cost[beta]" type="radio">
<input name="cost[delta]" type="radio">
...
$('input[name="cost[*]"]').each( function() {
    ...
}

这不起作用,因为它尝试解析名为“cost [*]”的输入。理想情况下,我想迭代成本数组中的任何元素。有没有一种首选的方法来使用jQuery?我的表单中有其他使用无线电类型的元素,因此选择无线电通常不是一个有效的选项。

3 个答案:

答案 0 :(得分:6)

将属性选择器设为“starts with”选择器(^=):

$('input[name^="cost"]').each(function() {
    ...
});

如果您发现其他输入元素以“cost”或“cost [”开头,那么您可能想要考虑更改查询元素的方式。另一种方法是为您要定位的元素添加一个特殊的类名,并完全忘记它们的名称。例如:

<input name="cost[alpha]" type="radio" class="form-cost">
<input name="cost[beta]" type="radio" class="form-cost">
<input name="cost[delta]" type="radio" class="form-cost">

然后你的选择器非常简单且非常有针对性:

$('input.form-cost').each(function() {
    ...
});

您可以通过简单地将元素包装在具有唯一ID或类名的容器中,并查询其包含的输入元素(如评论中的Allende所示)来获得最佳性能:

<div id="cost-inputs">
    <input name="cost[alpha]" type="radio">
    <input name="cost[beta]" type="radio">
    <input name="cost[delta]" type="radio">
</div>

$('#cost-inputs input').each(function() {
    ...
});

答案 1 :(得分:2)

尝试使用jquery中的contains选择器

$("input[name*='cost[']").each(function(){});

答案 2 :(得分:1)

尝试:

var sum = 0;
$("input[name^='cost']").each(function() {
     sum += Number($(this).val());
});

关于“以选择器开始”:[name ^ =“value”]
https://api.jquery.com/attribute-starts-with-selector/