Récupération du texte de l '<option> sélectionnée dans l'élément <select>

156

Dans ce qui suit:

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

Comment puis-je obtenir le texte de l'option sélectionnée (c'est-à-dire "Test One" ou "Test Two") en utilisant JavaScript

document.getElementsById('test').selectedValue renvoie 1 ou 2, quelle propriété renvoie le texte de l'option sélectionnée?

CountZero
la source

Réponses:

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
la source
génial javascript comme toujours!
doniyor
3
Cette réponse est obsolète, voir la réponse de @ davidjb ci-dessous pour un joli one-liner HTML5.
Christallkeks
1
@Christallkeks - le one-liner lève une exception si rien n'est sélectionné . moins de lignes n'est pas toujours mieux.
Sean Bright
88

Si vous utilisez jQuery, vous pouvez écrire le code suivant:

$("#selectId option:selected").html();
arturgrigor
la source
30
puisqu'il veut le texte, il vaut probablement mieux l'utiliser.text()
Muhd
5
À ne pas confondre avec $("#selectId option[selected]"), qui sélectionnera l'option qui a l'attribut "sélectionné" mais qui pourrait ne pas être actuellement sélectionnée.
mowwwalker
semble plus compliqué.!
EMI du
54
document.getElementById('test').options[document.getElementById('test').selectedIndex].text;
wormhit
la source
Cela a fonctionné pour moi aussi, après avoir essayé toutes les autres options.
mimi
ce motk parfait!
Albert Hidalgo
29

Sous HTML5, vous pouvez faire ceci:

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

La documentation de MDN sur https://developer.mozilla.org/en-US/docs/Web/API/HTMLSelectElement/selectedOptions indique une prise en charge intégrale de tous les navigateurs (au moins en décembre 2017), y compris Chrome, Firefox, Edge et les navigateurs mobiles , mais à l'exclusion d'Internet Explorer.

Davidjb
la source
+1, en attendant, c'est la voie à suivre. Le ticket Firefox est corrigé et j'ai même pris la peine d'ouvrir MS Edge pour vérifier qu'ils le prennent également en charge.
Christallkeks
7

La optionspropriété contient tous les <options>- à partir de là, vous pouvez regarder.text

document.getElementById('test').options[0].text == 'Text One'
Greg
la source
6

Vous pouvez utiliser selectedIndexpour récupérer le courant sélectionné option:

el = document.getElementById('elemId')
selectedText = el.options[el.selectedIndex].text
jamshid
la source
4

this.options [this.selectedIndex] .innerText

Phani CR
la source
2

Si vous avez trouvé ce fil et que vous vouliez savoir comment obtenir le texte de l'option sélectionnée via un événement, voici un exemple de code:

alert(event.target.options[event.target.selectedIndex].text);
des zéros et des uns
la source
1

Utilisez l'objet de liste de sélection pour identifier son propre index d'options sélectionné. À partir de là, récupérez le code HTML interne de cet index. Et maintenant vous avez la chaîne de texte de cette 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
la source
Ajouter une explication
HaveNoDisplayName
.innerHTMLobtient tous les enfants et leurs attributs. Bien que cela fonctionne quand un élément n'a pas d'enfants, si vous avez un élément avec des enfants, il renvoie bien plus que prévu.
hipkiss
1
Combien "d'enfants" pensez-vous avoir entre vos balises <option> Enfants? </option>?
Creeperstanson le
0

Similaire à @artur juste sans jQuery, avec du javascript simple:

// Utilisation de la variable "elt" de @ Sean-bright

var selection=elt.options[elt.selectedIndex].innerHTML;
viditkothari
la source
0

Méthode simple et facile:

const select = document.getElementById('selectID');
const selectedOption = [...select.options].find(option => option.selected).text;
Paweł Bednarczyk
la source
1
Bien que cet extrait de code puisse résoudre le problème, il n'explique pas pourquoi ni comment il répond à la question. Veuillez inclure une explication de votre code , car cela contribue vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question aux lecteurs à l'avenir, et que ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.
Luca Kiebel
Je ne vois pas comment c'est facile ou simple. Pourquoi l'utiliseriez find()-vous alors que vous connaissez déjà l'index de l'élément sélectionné? De plus, s'il n'y a pas d'élément sélectionné ( <select multiple>), cela générera une erreur.
Sean Bright