Извлечение текста выбранного <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, какое свойство возвращает текст выбранной опции?

Ответы:


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();

30
так как он хочет текст, вероятно, лучше использовать.text()
Muhd

5
Не путать с тем $("#selectId option[selected]"), что выберет опцию, которая имеет атрибут «selected», но может быть не выбран в данный момент.
косилка

кажется более сложным.
NDEthos


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.


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


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

.innerHTMLполучает всех детей и их атрибуты. Хотя он работает, когда элемент не имеет дочерних элементов, если у вас есть элемент с дочерними элементами, он возвращает намного больше, чем предполагалось.
hipkiss

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>), это приведет к ошибке.
Шон Брайт
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.