web-dev-qa-db-fra.com

Comment sélectionner une option par son texte?

Je dois vérifier si un <select> a une option dont le texte est égal à une valeur spécifique.

Par exemple, s'il y a un <option value="123">abc</option>, je chercherais "abc".

Y at-il un sélecteur pour faire cela?

Je cherche quelque chose de similaire à $('#select option[value="123"]'); mais pour le texte.

174
Hailwood

Cela pourrait aider:

$('#test').find('option[text="B"]').val();

Violon de démonstration

Cela vous donnerait l'option avec le texte B et non ceux qui ont un texte contenant B. J'espère que cela t'aides

Pour les versions récentes de jQuery, ce qui précède ne fonctionne pas. Comme commenté par Quandary ci-dessous, voici ce qui fonctionne pour jQuery 1.9.1:

$('#test option').filter(function () { return $(this).html() == "B"; }).val();

Violon mis à jour

288
Floyd Pink

Vous pouvez utiliser le sélecteur :contains() pour sélectionner des éléments contenant du texte spécifique.
Par exemple:

$('#mySelect option:contains(abc)')

Pour vérifier si un élément <select> donné a une telle option, utilisez la méthode .has() :

if (mySelect.has('option:contains(abc)').length)

Pour trouver tous les <select>s contenant une telle option, utilisez le sélecteur :has() :

$('select:has(option:contains(abc))')
122
SLaks

Aucune des suggestions précédentes n'a fonctionné pour moi dans jQuery 1.7.2 car j'essaie de définir l'index sélectionné de la liste en fonction de la valeur d'une zone de texte et certaines valeurs de texte sont contenues dans plusieurs options. J'ai fini par utiliser ce qui suit:

$('#mySelect option:contains(' + value + ')').each(function(){
    if ($(this).text() == value) {
        $(this).attr('selected', 'selected');
        return false;
    }
    return true;
});
28
Dr. C. Hilarius

J'ai rencontré le même problème ci-dessous est le code de travail:

$("#test option").filter(function() {
    return $(this).text() =='Ford';
}).prop("selected", true);

Démo: http://jsfiddle.net/YRBrp/83/

15
Jaydeep Shil

Cela a fonctionné pour moi: $("#test").find("option:contains('abc')");

13
Phillip Dennis

C'est la meilleure méthode pour sélectionner du texte dans la liste déroulante.

$("#dropdownid option:contains(your selected text)").attr('selected', true);
12
sreejesh

J'ai essayé quelques-unes de ces choses jusqu'à ce que je réussisse à utiliser Firefox et IE. C'est ce que je suis venu avec.

$("#my-Select").val($("#my-Select" + " option").filter(function() { return this.text == myText }).val());

une autre façon de l'écrire dans une fasion plus lisible:

var valofText = $("#my-Select" + " option").filter(function() {
    return this.text == myText
}).val();
$(ElementID).val(valofText);

Pseudocode:

$("#my-Select").val( getValOfText( myText ) );
4
user2561852

Utiliser suivant

$('#select option:contains(ABC)').val();
3
Dadaso Zanzane

Pour jquery la version 1.10.2 ci-dessous a fonctionné pour moi

  var selectedText="YourMatchText";
    $('#YourDropdownId option').map(function () {
       if ($(this).text() == selectedText) return this;
      }).attr('selected', 'selected');
    });
1
Mir Gulam Sarwar

Cela fonctionnera dans jQuery 1.6 (notez le signe deux-points avant le crochet d’ouverture), mais échoue avec les versions les plus récentes (1.10 à l’époque).

$('#mySelect option:[text=abc]")
1
Bartosz Firyn

Cela fonctionne pour moi:

var result = $('#SubjectID option')
            .filter(function () 
             { return $(this).html() == "English"; }).val();

La variable result renverra l'index de la valeur de texte correspondante. Maintenant, je vais juste le configurer en utilisant son index:

$('#SubjectID').val(result);
0
Willy David Jr

Ce travail pour moi

$('#mySelect option:contains(' + value + ')').attr('selected', 'selected');
0
Carlos Castañeda