Abrufen des Textes der ausgewählten <Option> im <Auswahl> -Element


156

Im Folgenden:

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

Wie kann ich den Text der ausgewählten Option (dh "Test Eins" oder "Test Zwei") mit JavaScript abrufen?

document.getElementsById('test').selectedValue Gibt 1 oder 2 zurück. Welche Eigenschaft gibt den Text der ausgewählten Option zurück?

Antworten:


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

brillantes Javascript wie immer!
Doniyor

3
Diese Antwort ist veraltet. In der Antwort von @ davidjb unten finden Sie einen schönen HTML5-Einzeiler.
Christallkeks

1
@Christallkeks - Der Einzeiler löst eine Ausnahme aus, wenn nichts ausgewählt ist . weniger Zeilen sind nicht immer besser.
Sean Bright

88

Wenn Sie jQuery verwenden, können Sie den folgenden Code schreiben:

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

30
da er den Text will, wahrscheinlich besser zu verwenden.text()
Muhd

5
Nicht zu verwechseln mit $("#selectId option[selected]"), dass die Option ausgewählt wird, die das Attribut "ausgewählt" hat, aber möglicherweise derzeit nicht ausgewählt ist.
Mowwwalker

scheint komplizierter.!
NDEthos

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

Es hat auch bei mir funktioniert, nachdem ich alle anderen Optionen ausprobiert hatte.
Mimi

Dieses Wort ist perfekt!
Albert Hidalgo


28

Unter HTML5 können Sie dies tun:

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

Die Dokumentation von MDN unter https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/selectedOptions weist auf eine vollständige browserübergreifende Unterstützung (Stand: mindestens Dezember 2017) hin, einschließlich Chrome, Firefox, Edge und mobiler Browser , aber ohne Internet Explorer.


+1, mittlerweile ist dies der richtige Weg. Das Firefox-Ticket ist behoben und ich habe mir sogar die Mühe gemacht, MS Edge zu öffnen, um zu überprüfen, ob es auch unterstützt wird.
Christallkeks

7

Die optionsEigenschaft enthält alle <options>- von dort können Sie sehen.text

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

6

Sie können verwenden selectedIndex, um den aktuell ausgewählten abzurufen option:

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


2

Wenn Sie diesen Thread gefunden haben und wissen möchten, wie Sie den ausgewählten Optionstext über das Ereignis erhalten, finden Sie hier einen Beispielcode:

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

1

Verwenden Sie das Auswahllistenobjekt, um den eigenen ausgewählten Optionsindex zu identifizieren. Von dort aus - holen Sie sich den inneren HTML-Code dieses Index. Und jetzt haben Sie die Textzeichenfolge dieser Option.

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

Fügen Sie eine Erklärung hinzu
HaveNoDisplayName

.innerHTMLbekommt alle Kinder und ihre Attribute. Während es funktioniert, wenn ein Element keine untergeordneten Elemente hat, gibt es weit mehr zurück, als beabsichtigt ist, wenn Sie ein Element mit untergeordneten Elementen haben.
Hipkiss

1
Wie viele "Kinder" erwarten Sie zwischen Ihren <option> -Kindern? </ Option> -Tags?
Creeperstanson

0

Ähnlich wie bei @artur, nur ohne jQuery, mit einfachem Javascript:

// Verwenden der Variablen "elt" von @ Sean-bright

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

0

Einfach, einfach:

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

1
Dieses Codefragment kann das Problem zwar lösen, erklärt jedoch nicht, warum oder wie es die Frage beantwortet. Bitte geben Sie eine Erklärung für Ihren Code an , da dies wirklich zur Verbesserung der Qualität Ihres Beitrags beiträgt. Denken Sie daran, dass Sie die Frage für Leser in Zukunft beantworten und diese Personen möglicherweise die Gründe für Ihren Codevorschlag nicht kennen.
Luca Kiebel

Ich sehe nicht, wie einfach oder einfach das ist. Warum sollten Sie verwenden, find()wenn Sie den Index des ausgewählten Elements bereits kennen? Wenn kein Element ( <select multiple>) ausgewählt ist , wird ein Fehler generiert.
Sean Bright
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.