Je dois vérifier si un a une option dont le texte est égal à une valeur spécifique.
Par exemple, s’il y a une abc
, je chercherais “abc”.
Y a-t-il un sélecteur pour faire cela?
Je cherche quelque chose de similaire à $('#select option[value="123"]');
mais pour le texte.
Cela pourrait aider:
$('#test').find('option[text="B"]').val();
Violon de démo
Cela vous donnerait l’option avec le texte B
et pas ceux qui ont du texte qui contient 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
Vous pouvez utiliser le sélecteur :contains()
pour sélectionner des éléments contenant un texte spécifique.
Par exemple:
$('#mySelect option:contains(abc)')
Pour vérifier si un élément donné possède une telle option, utilisez la méthode
.has()
:
if (mySelect.has('option:contains(abc)').length)
Pour trouver tous les qui contiennent une telle option, utilisez le sélecteur :
:has()
:
$('select:has(option:contains(abc))')
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 les éléments suivants:
$('#mySelect option:contains(' + value + ')').each(function(){ if ($(this).text() == value) { $(this).attr('selected', 'selected'); return false; } return true; });
Cela a fonctionné pour moi: $("#test").find("option:contains('abc')");
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);
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);
J’ai essayé quelques unes de ces choses jusqu’à ce que j’en ai une pour Firefox et IE. C’est ce que j’ai trouvé.
$("#my-Select").val($("#my-Select" + " option").filter(function() { return this.text == myText }).val());
une autre façon de l’écrire dans un style plus lisible:
var valofText = $("#my-Select" + " option").filter(function() { return this.text == myText }).val(); $(ElementID).val(valofText);
Pseudocode:
$("#my-Select").val( getValOfText( myText ) );
Utiliser suivant
$('#select option:contains(ABC)').val();
Cela fonctionnera dans jQuery 1.6 (note deux points avant le crochet d’ouverture), mais échoue sur les nouvelles versions (1.10 à ce moment-là).
$('#mySelect option:[text=abc]")
Pour jquery version 1.10.2 ci-dessous travaillé pour moi
var selectedText="YourMatchText"; $('#YourDropdownId option').map(function () { if ($(this).text() == selectedText) return this; }).attr('selected', 'selected'); });
Ce travail pour moi
$('#mySelect option:contains(' + value + ')').attr('selected', 'selected');
Soit vous parcourez les options, soit placez le même texte dans un autre atsortingbut de l’option et sélectionnez avec cela.
Cela fonctionnera également.
$ (‘# test’). find (“option de sélection: contient (‘B’)”). filter (“: selected”);
Comme décrit dans cette réponse , vous pouvez facilement créer votre propre sélecteur pour hasText. Cela vous permet de trouver l’option avec $('#test').find('option:hastText("B")').val();
Voici la méthode hasText que j’ai ajoutée:
if( ! $.expr[':']['hasText'] ) { $.expr[':']['hasText'] = function( node, index, props ) { var retVal = false; // Verify single text child node with matching text if( node.nodeType == 1 && node.childNodes.length == 1 ) { var childNode = node.childNodes[0]; retVal = childNode.nodeType == 3 && childNode.nodeValue === props[3]; } return retVal; }; }
Cela fonctionne pour moi
var options = $(dropdown).find('option'); var targetOption = $(options).filter( function () { return $(this).html() == value; }); console.log($(targetOption).val());
Merci pour tous les messages.