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?

CountZero
quelle

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');
Sean Bright
quelle
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();
Arturgrigor
quelle
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;
Wurmhit
quelle
Es hat auch bei mir funktioniert, nachdem ich alle anderen Optionen ausprobiert hatte.
Mimi
Dieses Wort ist perfekt!
Albert Hidalgo
28
selectElement.options[selectElement.selectedIndex].text;

Verweise:


quelle
Leicht zu verstehen als die Antwort, die @wormhit gab. +1 zur Vereinfachung
Jacques Mathieu
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.

davidjb
quelle
+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'
Greg
quelle
6

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

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

this.options [this.selectedIndex] .innerText

Phani CR
quelle
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);
Nullen und Einsen
quelle
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>
Creeperstanson
quelle
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;
viditkothari
quelle
0

Einfach, einfach:

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