Pobieranie tekstu wybranej opcji <option> w elemencie <select>


156

W następującym:

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

Jak uzyskać tekst wybranej opcji (np. „Test One” lub „Test Two”) przy użyciu JavaScript

document.getElementsById('test').selectedValue zwraca 1 lub 2, jaka właściwość zwraca tekst wybranej opcji?

Odpowiedzi:


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

genialny javascript jak zawsze!
— doniyor

3
Ta odpowiedź jest nieaktualna, zobacz odpowiedź @ davidjb poniżej, aby uzyskać ładną, jednowierszową treść HTML5.
— Christallkeks

1
@Christallkeks - jednolinijka zgłasza wyjątek, jeśli nic nie jest zaznaczone . mniej linii nie zawsze jest lepsze.
— Sean Bright

88

Jeśli używasz jQuery, możesz napisać następujący kod:

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

30
ponieważ chce tekstu, prawdopodobnie lepiej go użyć.text()
— Muhd

5
Nie należy tego mylić $("#selectId option[selected]"), co spowoduje wybranie opcji, która ma atrybut „wybrane”, ale może nie być aktualnie wybrana.
— mowwwalker

wydaje się bardziej skomplikowane.!
— NDEthos

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

U mnie też zadziałało, po wypróbowaniu wszystkich innych opcji.
— mimi

to słowo idealne!
— Albert Hidalgo,

29

W HTML5 możesz to zrobić:

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

Dokumentacja MDN pod adresem https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/selectedOptions wskazuje na pełną obsługę różnych przeglądarek (od co najmniej grudnia 2017 r.), W tym przeglądarek Chrome, Firefox, Edge i mobilnych , ale z wyłączeniem Internet Explorera.


+1, tymczasem to jest droga. Bilet Firefoksa jest naprawiony i nawet zadałem sobie trud otwierania MS Edge, aby sprawdzić, czy też go obsługują.
— Christallkeks


7

optionsWłaściwość zawiera wszystko <options>- stamtąd można spojrzeć na.text

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

6

Możesz użyć, selectedIndexaby pobrać aktualnie wybrane option:

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


2

Jeśli znalazłeś ten wątek i chciałeś wiedzieć, jak uzyskać tekst wybranej opcji za pośrednictwem zdarzenia, oto przykładowy kod:

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

1

Użyj obiektu listy wyboru, aby zidentyfikować własny indeks wybranych opcji. Stamtąd - pobierz wewnętrzny kod HTML tego indeksu. A teraz masz ciąg tekstowy tej opcji.

<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>

Dodaj wyjaśnienie
— HaveNoDisplayName

.innerHTMLdostaje wszystkie dzieci i ich atrybuty. Chociaż działa, gdy element nie ma dzieci, jeśli masz element z dziećmi, zwraca znacznie więcej niż jest zamierzone.
— hipkiss

1
Ile „dzieci” spodziewasz się mieć pomiędzy tagami <option> Children? </option>?
— Creeperstanson

0

Podobny do @artur tylko bez jQuery, z prostym javascriptem:

// Używanie zmiennej „elt” @ Seana-brighta

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

0

Łatwy, prosty sposób:

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

1
Chociaż ten fragment kodu może rozwiązać problem, nie wyjaśnia, dlaczego ani jak odpowiada na pytanie. Dołącz wyjaśnienie swojego kodu , ponieważ naprawdę pomaga to poprawić jakość Twojego posta. Pamiętaj, że odpowiadasz na pytanie do czytelników w przyszłości, a osoby te mogą nie znać powodów, dla których zaproponowałeś kod.
— Luca Kiebel,

Nie rozumiem, jak to jest łatwe lub proste. Dlaczego miałbyś używać, find()skoro znasz już indeks wybranej pozycji? Ponadto, jeśli nie ma wybranej pozycji ( <select multiple>), spowoduje to błąd.
— Sean Bright
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.