2

我正在从一组 div 中动态获取选定的下拉选项的文本。当我这样做时:

$("#divID").children("select").eq(0).find('option:selected').text();

一切正常。但是,当我这样做时:

$("#divID").children("select option:selected").eq(0).text();

它没有按预期抓取文本。我想知道后一种获取文本的方法我做错了什么。谢谢。

JSFiddle - 第一种方法(作品)

JSFiddle - 第二种方法(不起作用)

4

3 回答 3

4

你正在做的问题是你使用children.

如果您要更改children为,find那么它可以完美运行。原因是children它只找到作为被操作集合的直接子元素的元素。所以它只会返回直接孩子的东西#divID。如您所见,这些option元素不是直接子元素,因此无法返回。

$("#divID").find("select option:selected").eq(0).text();

http://jsfiddle.net/nkhaD/5/

当然,这两者之间存在一些细微的差异。考虑这个 HTML:

<div id="divLocation">
    <div>            
        <select id="1"/>
    </div>
    <select id="2"/>
</div>

我已经删除了选项,但是您的原始选择器将获得 id #2(因为它是唯一的子选择,#divLocation而我的选择将获得第一个选定的选项,大概在 id #1 中。

所以这个故事的寓意是做任何你真正想要的选择器。:)

于 2012-08-06T14:58:17.370 回答
2

我会做这个:

    value = $("#divLocation select option:selected").text();

我不确切知道哪种方法是“正确的”。我认为我的理解很简单。因此,请选择您认为易于阅读的那个。如果需要性能,请仅使用纯 javascript 并让选择具有 ID。

document.getElementById("divLocationSelect").value;

http://jsfiddle.net/nkhaD/4/

于 2012-08-06T14:57:45.293 回答
1

你可以做:

$("#divID").find("select option:selected").eq(0).text();

.children()方法的不同之处.find()在于.children()仅在 DOM 树中向下移动一个级别,同时.find()也可以向下遍历多个级别以选择后代元素(孙子等)。

.children()

于 2012-08-06T15:01:33.700 回答