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?

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

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

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;

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.


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

6

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

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


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

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>

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;

0

Méthode simple et facile:

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

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.