我从一个div数组中动态地抓取一个选定的下拉选项的文本。当我这样做的时候:
$("#divID").children("select").eq(0).find('option:selected').text();一切都很好。然而,当我这样做的时候:
$("#divID").children("select option:selected").eq(0).text();它没有像预期的那样抓取文本。我想知道后一种获取文本的方法做错了什么。谢谢。
JSFiddle - First Approach (Works)
JSFiddle - Second Approach (Doesn't Work)
发布于 2012-08-06 22:58:17
你所做的事情的问题在于你使用了children。
如果您将children更改为find,那么它可以完美地工作。原因是children只查找作为被操作集的直接子级的元素。因此,它将只返回#divID的直接子对象。如您所见,option元素不是直接子元素,因此不能返回它们。
$("#divID").find("select option:selected").eq(0).text();请参阅http://jsfiddle.net/nzhaD/5/
当然,这两者之间也有一些细微的区别。Cosnider这个HTML:
<div id="divLocation">
<div>
<select id="1"/>
</div>
<select id="2"/>
</div>我已经删除了选项,但是您的原始选择器将获得id #2 (因为它是唯一的选择,它是#divLocation的子项,而我的选择器将获得第一个选定的选项,该选项大概在id #1中)。
因此,这个故事的寓意是,无论哪个选择器做你真正想做的事情,就做什么。:)
发布于 2012-08-06 22:57:45
我会这样做的:
value = $("#divLocation select option:selected").text();我不知道哪种方法才是“正确的”。我认为我的很容易理解。所以,选择你认为容易阅读的那本书吧。如果性能是必需的,那么只需使用纯javascript,并让select有一个ID。
document.getElementById("divLocationSelect").value;http://jsfiddle.net/nzhaD/4/
发布于 2012-08-06 23:01:34
您可以执行以下操作:
$("#divID").find("select option:selected").eq(0).text();.children()方法与.find()的不同之处在于,.children()只向下遍历DOM树的一个级别,而.find()可以向下遍历多个级别以选择后代元素(孙子元素等)。也是。
请参阅.children()
https://stackoverflow.com/questions/11830716
复制相似问题