检索<select>元素中所选<option>的文本


156

在下面的:

<select id="test">
    <option value="1">Test One</option>
    <option value="2">Test Two</option>
</select>

如何使用JavaScript获取所选选项的文本(即“测试一”或“测试二”)

document.getElementsById('test').selectedValue 返回1或2,哪个属性返回所选选项的文本?

Answers:


258
function getSelectedText(elementId) {
    var elt = document.getElementById(elementId);

    if (elt.selectedIndex == -1)
        return null;

    return elt.options[elt.selectedIndex].text;
}

var text = getSelectedText('test');

一如既往的精彩javascript!
doniyor

3
这个答案已经过时了,请参阅下面的@davidjb答案,以获得一个不错的HTML5单行代码。
Christallkeks '18

1
@Christallkeks- 如果未选择任何内容,单行将引发异常。更少的行并不总是更好。
肖恩·布莱特

88

如果使用jQuery,则可以编写以下代码:

$("#selectId option:selected").html();

30
因为他想要文本,所以可能更好用.text()
-Muhd

5
不要与混淆$("#selectId option[selected]"),它将选择具有“已选择”属性但当前可能未选择的选项。
mowwwalker

似乎更复杂。
NDEthos

54
document.getElementById('test').options[document.getElementById('test').selectedIndex].text;

在尝试了所有其他选择之后,它也对我有用。
mimi

这个完美!
艾伯特·伊达尔戈

29

在HTML5下,您可以执行以下操作:

document.getElementById('test').selectedOptions[0].text

MDN在https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLSelectElement/selectedOptions上的文档表示全面的跨浏览器支持(至少从2017年12月开始),包括Chrome,Firefox,Edge和移动浏览器,但不包括Internet Explorer。


+1,与此同时这是要走的路。Firefox票是固定的,我什至不愿打开MS Edge来验证他们是否也支持它。
Christallkeks '18


7

options属性包含所有<options>-从此处可以查看.text

document.getElementById('test').options[0].text == 'Text One'

6

您可以使用selectedIndex来检索当前选定的option

el = document.getElementById('elemId')
selectedText = el.options[el.selectedIndex].text


2

如果您找到了该线程,并且想知道如何通过事件获取选定的选项文本,请参见以下示例代码:

alert(event.target.options[event.target.selectedIndex].text);

1

使用选择列表对象来标识其自己的选择选项索引。从那里-获取该索引的内部HTML。现在,您有了该选项的文本字符串。

<select onchange="alert(this.options[this.selectedIndex].innerHTML);">
       <option value="">Select Actions</option>
       <option value="1">Print PDF</option>
       <option value="2">Send Message</option>
       <option value="3">Request Review</option>
       <option value="4">Other Possible Actions</option>
    </select>

添加一些说明
HaveNoDisplayName 2016年

.innerHTML获取所有孩子及其属性。尽管当元素没有子元素时它可以工作,但是如果您的元素有子元素,它返回的效果将超出预期。
hipkiss16年

1
您希望在<option> Children?</ option>标记之间有多少个“孩子”?
Creeperstanson

0

类似于@artur,仅使用jQuery,仅使用普通javascript:

//使用@ Sean-bright的“ elt”变量

var selection=elt.options[elt.selectedIndex].innerHTML;

0

简单的方法:

const select = document.getElementById('selectID');
const selectedOption = [...select.options].find(option => option.selected).text;

1
尽管此代码段可以解决问题,但并未说明原因或答案。请附上代码说明,因为这确实有助于提高您的帖子质量。请记住,您将来会为读者回答这个问题,而这些人可能不知道您提出代码建议的原因。
卡·基贝尔

我不知道这是多么容易或简单。find()当您已经知道所选项目的索引时,为什么要使用?另外,如果没有选择的项目(<select multiple>),则会产生错误。
肖恩·布莱特
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.