2

这让我很伤心,我几乎可以肯定这是愚蠢的。

为什么返回未定义而不是“测试”?

JSFiddle

<fieldset class="fieldset">
    <select class="list">
        <option selected="selected">Test</option>
    </select>
</fieldset>

<script type="text/javascript">
    alert($('.fieldset').children('select.list option:selected').val());
</script>
4

4 回答 4

2

试试这个...

alert($('.fieldset').children().val());

jsFiddle示例

问候。

于 2013-01-28T20:14:34.307 回答
1

您需要使用find而不是children.

children为您提供选择器的直接后代,即仅向下一级。find搜索所有后代。否则,你就上当了!

select(请记住,如果您的 中包含多个fieldset,则当前选择器将一次全部获取它们。如果这不是您想要的,请使用能够获得select您想要的东西;在您的示例中,它将是$('.list').children('select.list option:selected').val()

于 2013-01-28T20:11:47.340 回答
1

select.list是的直子,.fieldsetoption不是。

children选择器应指定与选项不匹配的直接子代的选择器,因为.fieldset它们是列表的子代。

children方法不是递归的,仅在直接子/后代中查找匹配项,而不是在子项的子项中查找匹配项。

您可以将select.list选择器作为您的首字母的一部分,selector然后孩子们就可以了options。与此类似:

alert($('.fieldset select.list').children('option:selected').val());

演示- 更正的选择器


此外,您也可以像这样完全不使用 children 方法:

alert($('.fieldset select.list>option:selected').val());

或者像这样:

alert($('select.list>option:selected', '.fieldset').val());

有很多方法可以做到这一点。

于 2013-01-28T20:12:13.313 回答
0
alert($('.fieldset select.list option:selected').val());
于 2013-01-28T20:33:53.297 回答