Извлечение текста выбранного <option> в элементе <select>

156

В следующих:

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

Как я могу получить текст выбранной опции (например, «Test One» или «Test Two»), используя JavaScript

document.getElementsById('test').selectedValue возвращает 1 или 2, какое свойство возвращает текст выбранной опции?

CountZero
источник

Ответы:

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 как всегда!
Донийор
3
Этот ответ устарел, см. Ответ @ davidjb ниже для хорошей строки HTML5.
Christallkeks
1
@Christallkeks - однострочник создает исключение, если ничего не выбрано . меньше строк не всегда лучше.
Шон Брайт
88

Если вы используете jQuery, вы можете написать следующий код:

$("#selectId option:selected").html();
arturgrigor
источник
30
так как он хочет текст, вероятно, лучше использовать.text()
Muhd
5
Не путать с тем $("#selectId option[selected]"), что выберет опцию, которая имеет атрибут «selected», но может быть не выбран в данный момент.
косилка
кажется более сложным.
NDEthos
54
document.getElementById('test').options[document.getElementById('test').selectedIndex].text;
wormhit
источник
Это сработало и у меня, попробовав все остальные варианты.
Мими,
это слово идеально!
Альберт Идальго
29

Под HTML5 вы можете сделать это:

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

Документация MDN по адресу https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/selectedOptions указывает на полную межбраузерную поддержку (по крайней мере на декабрь 2017 года), включая Chrome, Firefox, Edge и мобильные браузеры , но исключая Internet Explorer.

davidjb
источник
+1, тем временем это путь. Билет Firefox исправлен, и я даже потрудился открыть MS Edge, чтобы убедиться, что они тоже его поддерживают.
Christallkeks
7

optionsСвойство содержит все <options>- оттуда вы можете посмотреть на.text

document.getElementById('test').options[0].text == 'Text One'
Greg
источник
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>
Creeperstanson
источник
Добавьте некоторое объяснение
HaveNoDisplayName
.innerHTMLполучает всех детей и их атрибуты. Хотя он работает, когда элемент не имеет дочерних элементов, если у вас есть элемент с дочерними элементами, он возвращает намного больше, чем предполагалось.
hipkiss
1
Сколько "детей" вы ожидаете иметь между вашими тегами <option> Children? </ Option>?
Creeperstanson
0

Аналогично @artur, только без jQuery, с простым javascript:

// Используя переменную @ Sean-bright "elt"

var selection=elt.options[elt.selectedIndex].innerHTML;
viditkothari
источник
0

Простой, простой способ:

const select = document.getElementById('selectID');
const selectedOption = [...select.options].find(option => option.selected).text;
Павел Беднарчик
источник
1
Хотя этот фрагмент кода может решить проблему, он не объясняет, почему и как он отвечает на вопрос. Пожалуйста, включите объяснение вашего кода , так как это действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос читателей в будущем, и эти люди могут не знать причин, по которым вы предлагаете код.
Лука Кибель
Я не понимаю, как это легко или просто. Зачем использовать, find()если вы уже знаете индекс выбранного элемента? Кроме того, если нет выбранного элемента ( <select multiple>), это приведет к ошибке.
Шон Брайт