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.