2012-04-04 106 views
53

下面的代码工作:

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

如何重构第二行:

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

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

回答

59
$(this).find('option:selected').text(); 
+0

这非常适合我 - 我想'$( “选项:选择”,这)'如上所述,但这是有问题的。我正在使用按钮单击将所选选项元素文本追加到另一个div,但是当我单击按钮时,它实际上改变了所选元素......很奇怪。使用这个。 – skwidbreth 2016-04-04 21:30:42

7

这应该工作:

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

与上面相同的答案 – 2017-12-05 19:10:04

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

由于option很可能是select直接孩子,你还可以使用:

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

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

+0

你从哪里得到'选项选择'没有引号......? – 2012-04-04 13:14:28

+0

选项减去选中? – 2012-04-04 13:16:23

+0

这是我发布时的错字。更正了答案。 – thomthom 2012-04-04 13:17:10

90

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

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

+1

解决了我的问题,谢谢@jorgebg – aiffin 2018-02-06 11:36:04

8

您可以使用find寻找那些为节点(S)的后代所选择的选项由当前的jQuery指出,对象:

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

因为这很可能是一个即时的孩子,我真的建议使用.children代替:

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

的最佳答案:

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

我喜欢孩子们在这种情况下,因为你知道你只是一个分支下来的DOM树好......我的意见电平变化

34

最佳和最简单的办法在下拉事件来获得所选择的选项:

$('option:selected',this); 

来获取值属性:

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

获得标签的显示部分:

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

在您的样本:

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

请勿使用'.context',因为它已被弃用jQuery的1.10 - http://api.jquery.com/category/deprecated/deprecated-1.10/ – rafx 2015-03-10 15:57:31

+0

是的,但你的意思是这样的: http://api.jquery.com/context/ $( “ul”,document.body).context.nodeName 我不喜欢使用 – angelmedia 2015-03-12 06:15:27

+0

我喜欢这个答案,但为什么最好? – 2016-10-10 14:06:29

19
var cur_value = $('option:selected',this).text(); 
+0

虽然这可能在理论上回答这个问题,[这将是更可取的](/ meta.stackoverflow.com/q/8259)包括答案的重要部分在这里,并提供参考。 – manetsus 2016-04-03 03:32:06