在jQuery中,如何通过name属性选择不同的元素?

时间:2009-11-18 19:06:01

标签: jquery css-selectors

我试图遍历表单中的一些元素(无线电,文本框和选择框)并从每个元素中获取值。我正在循环每个元素的名称(我不认为我可以使用ID,因为一组单选按钮都有不同的ID,但都具有相同的名称)。

以下是2个包含我需要的所有元素的选择器:

$("input[name=" + prop + "]")
$("select[name=" + prop + "]")

其中prop是循环迭代器。

我想在两个选择器上执行相同的操作,所以我尝试将它们组合在一起:

$("input[name=" + prop + "]", "select[name=" + prop + "]")

但那没用。

有没有办法在一个选择器中组合搜索输入元素和选择元素?

谢谢!

3 个答案:

答案 0 :(得分:10)

你只有一个小错误:你将两个选择器声明为两个不同的参数而不是一个参数,逗号作为选择器的一部分:

$("input[name=" + prop + "], select[name=" + prop + "]")

您编写它的方式使用第二个选择器参数的元素作为解析第一个选择器参数的上下文。

答案 1 :(得分:5)

如果逗号包含在选择器字符串中,它将起作用。你也可以这样做

$("input, select").filter("[name=" + prop + "]")

消除了写“[name =”+ prop +“]两次。

答案 2 :(得分:4)

不要试图将你所做的一切都搞砸到jQuery中。 DOM Level 1 HTML标准为您提供HTMLFormElement.elements,这对于name中的异常字符(如选择器字符串)而言简单,快速且不会失败。

<form id="x" ...>
    <input type="text" name="foo" />
    <select name="foo"></select>
</form>

<script type="text/javascript">
    var prop= 'foo';
    var form= $('#x')[0];
    var foos= form.elements[prop];
    alert(foos.length+' '+foos[0].type+' '+foos[1].type);  // 2 text select-one
</script>