选项:在所有情况下,第一个孩子都不会选择相同的选项

时间:2011-12-09 18:37:40

标签: javascript jquery html

为什么当select中包含optgroup时,这不起作用?

不起作用

$("option:first-child").attr("selected", "selected");

作品

$("select>option:first-child").attr("selected", "selected");

当我执行$("select:eq(1) option:first-child").val()时,它似乎正确option,但当我致电attr()时,却没有选择正确的{{1}}。

示例:http://jsfiddle.net/7J2Yb/

1 个答案:

答案 0 :(得分:5)

如果您检查$("option:first-child").length的值,您会发现它是5:first-child正在选择父母的第一个子项,即:

<SELECT id='a'>
    <OPTION selected value=0>(all)</OPTION><!-- THIS ONE -->
    <OPTION value=1>A</OPTION>
    <OPTION value=2>B</OPTION>
    <OPTION value=3>C</OPTION>
</SELECT>

<SELECT id='b'>    
    <OPTION selected value=0>(all)</OPTION><!-- THIS ONE -->
    <optgroup label="A">
        <OPTION value=1>A</OPTION><!-- THIS ONE -->
    </optgroup>
    <optgroup label="B">
        <OPTION value=2>B</OPTION><!-- THIS ONE -->
    </optgroup>
    <optgroup label="C">
        <OPTION value=3>C</OPTION><!-- THIS ONE -->
    </optgroup>
</SELECT>

此外,$("select:eq(1) option:first-child").length等同于4,原因与上述相同。在数组上调用.val()输出第一个元素值,但选择器正在选择所有4个元素。


如果要在每个select中选择第一个元素:

$("select").find("option:first").attr("selected", true);

工作示例:http://jsfiddle.net/hunter/7J2Yb/2/