如何在jQuery中获得$(this)选择的选项?


91

以下代码有效:

$("#select-id").change(function(){
  var cur_value = $('#select-id option:selected').text();
  . . .
});

如何将第二行重构为:

var cur_value = $(this).***option-selected***.text();

你有什么用***option-selected***

Answers:


120

对于选定的值: $(this).val()

如果您需要选择的选项元素, $("option:selected", this)


101
 $(this).find('option:selected').text();

这对我来说非常理想-我$("option:selected", this)如上所述进行了尝试,但这是有问题的。我使用按钮单击将选定的选项元素文本附加到另一个div,但是当我单击按钮时,它实际上更改了选定的元素……很奇怪。使用这个。
skwidbreth '16

53

我认为下拉菜单中的onchange事件的最佳和最短方法是获取所选选项:

$('option:selected',this);

获取value属性:

$('option:selected',this).attr('value');

在标签之间获取显示的部分:

$('option:selected',this).text();

在您的示例中:

$("#select-id").change(function(){
  var cur_value = $('option:selected',this).text();
});

不要使用.context,自jQuery 1.10起已弃用-api.jquery.com/category/deprecated/deprecated-1.10
rafx 2015年

是的,但是你的意思是: api.jquery.com/context $(“ ul”,document.body).context.nodeName我不使用
angelmedia 2015年

1
我喜欢答案,但是为什么是最好的呢?
塞巴斯蒂安·吉凯尔



9

您可以find用来查找所选选项,该选项是当前jQuery对象所指向的节点的后代:

var cur_value = $(this).find('option:selected').text();

由于这可能是直子,所以我实际上建议.children改用:

var cur_value = $(this).children('option:selected').text();

7
var cur_value = $(this).find('option:selected').text();

由于option很可能是select您的直系子女,因此也可以使用:

var cur_value = $(this).children('option:selected').text();

http://api.jquery.com/find/


您在哪里option-selected没有报价...?
白金Azure

我发帖时那是一个错字。更正了答案。
thomthom '04

find('option:selected')为我返回一个空字符串。需要什么版本的jQuery?我在1.6.1中工作。children('option:selected')确实有效。
B 2012年

option:selected一直以来有1.0 api.jquery.com/selected-selector
thomthom

0

最佳的揣测:

var cur_value = $('#select-id').children('option:selected').text();

在这种情况下,我更喜欢孩子,因为您知道您只会沿着DOM树向下移动一个分支...


也许您真正的意思是var cur_value = $(this).children('option:selected')。text();
乔·约翰斯顿

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.