Recupero del testo dell'elemento <option> selezionato in <select>


156

Nel seguente:

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

Come posso ottenere il testo dell'opzione selezionata (ad esempio "Test One" o "Test Two") usando JavaScript

document.getElementsById('test').selectedValue restituisce 1 o 2, quale proprietà restituisce il testo dell'opzione selezionata?

Risposte:


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

javascript brillante come sempre!
doniyor,

3
Questa risposta è obsoleta, vedi la risposta di @ davidjb di seguito per un bel HTML5 one-liner.
Christallkeks,

1
@Christallkeks: il one-liner genera un'eccezione se non viene selezionato nulla . meno linee non è sempre migliore.
Sean Bright

88

Se usi jQuery puoi scrivere il seguente codice:

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

30
poiché vuole il testo, probabilmente meglio usarlo.text()
Muhd,

5
Da non confondere $("#selectId option[selected]"), che selezionerà l'opzione che ha l'attributo "selezionato" ma potrebbe non essere attualmente selezionato.
mowwwalker,

sembra più complicato.!
NDEthos,

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

Ha funzionato anche per me, dopo aver provato tutte le altre opzioni.
mimi,

questo wordk perfetto!
Albert Hidalgo,

29

In HTML5 sei in grado di farlo:

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

La documentazione di MDN su https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/selectedOptions indica il supporto completo per più browser (almeno a dicembre 2017), inclusi Chrome, Firefox, Edge e browser mobili , ma escluso Internet Explorer.


+1, nel frattempo questa è la strada da percorrere. Il ticket di Firefox è stato risolto e mi sono persino preoccupato di aprire MS Edge per verificare che anche loro lo supportino.
Christallkeks,


7

La optionsproprietà contiene tutto il <options>- da lì puoi guardare.text

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

6

È possibile utilizzare selectedIndexper recuperare l'attuale selezionato option:

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


2

Se hai trovato questa discussione e volevi sapere come ottenere il testo dell'opzione selezionata tramite evento, ecco il codice di esempio:

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

1

Utilizzare l'oggetto elenco di selezione, per identificare il proprio indice delle opzioni selezionate. Da lì: prendi l'HTML interno di quell'indice. E ora hai la stringa di testo di quell'opzione.

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

Aggiungi una spiegazione
HaveNoDisplayName

.innerHTMLottiene tutti i bambini e i loro attributi. Mentre funziona quando un elemento non ha figli, se hai un elemento con figli restituisce molto più di quanto previsto.
hipkiss,

1
Quanti "bambini" ti aspetti di avere tra i tag <option> Children? </option>?
Creeperstanson,

0

Simile a @artur solo senza jQuery, con javascript semplice:

// Utilizzo della variabile "elt" di @ Sean-bright

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

0

Modo semplice e semplice:

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

1
Sebbene questo frammento di codice possa risolvere il problema, non spiega perché o come risponde alla domanda. Includi una spiegazione per il tuo codice , in quanto ciò aiuta davvero a migliorare la qualità del tuo post. Ricorda che stai rispondendo alla domanda per i lettori in futuro e quelle persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
Luca Kiebel,

Non vedo come sia facile o semplice. Perché dovresti usare find()quando conosci già l'indice dell'elemento selezionato? Inoltre, se non è presente alcun elemento selezionato ( <select multiple>), questo genererà un errore.
Sean Bright
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.