Отримання тексту вибраного <option> в елементі <select>


156

У наступному:

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

Як я можу отримати текст вибраної опції (тобто "Тест один" або "Тест два") за допомогою 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, як завжди!
doniyor

3
Ця відповідь застаріла, див. Відповідь @ davidjb нижче для приємного однорівневого HTML5.
Крісталкекс

1
@Christallkeks - однолінійний кидає виняток, якщо нічого не вибрано . менше ліній не завжди краще.
Шон Яскравий

88

Якщо ви використовуєте jQuery, ви можете написати наступний код:

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

30
оскільки він хоче текст, мабуть, краще використовувати.text()
Muhd

5
Не плутати $("#selectId option[selected]"), що вибере параметр, який має "вибраний" атрибут, але може бути не вибраний на даний момент.
mowwwalker

здається складнішим!
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, щоб переконатися, що вони теж його підтримують.
Крісталкекс

28
selectElement.options[selectElement.selectedIndex].text;

Список літератури:


Легко зрозуміти, ніж відповідь дала @wormhit. +1 для спрощення
Жак Матьє

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

Використовуйте об’єкт списку select, щоб визначити власний індекс вибраних параметрів. Звідти - захопіть внутрішній 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> Діти? </option>?
Creeperstanson

0

Схожий на @artur просто без jQuery, з простим javascript:

// Використання змінної "elt" @ Sean -right

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.