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?

CountZero
źródło

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');
Sean Bright
źródło
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();
arturgrigor
źródło
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;
wormhit
źródło
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.

davidjb
źródło
+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'
Greg
źródło
6

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

el = document.getElementById('elemId')
selectedText = el.options[el.selectedIndex].text
jamshid
źródło
4

this.options [this.selectedIndex] .innerText

Phani CR
źródło
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);
zera i jedynki
źródło
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>
Creeperstanson
źródło
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;
viditkothari
źródło
0

Łatwy, prosty sposób:

const select = document.getElementById('selectID');
const selectedOption = [...select.options].find(option => option.selected).text;
Paweł Bednarczyk
źródło
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