J'ai le code HTML suivant:
<select id="dropdown">
<option>A</option>
<option>B</option>
<option>C</option>
</select>
J'ai la chaîne "B" donc je veux définir l'attribut selected
dessus pour que ce soit:
<select id="dropdown">
<option>A</option>
<option selected="selected">B</option>
<option>C</option>
</select>
Comment ferais-je cela dans jQuery?
Si cela ne vous dérange pas de modifier un peu votre code HTML pour inclure l'attribut value
des options, vous pouvez réduire considérablement le code nécessaire pour ce faire:
<option>B</option>
à
<option value="B">B</option>
Cela vous sera utile si vous voulez faire quelque chose comme:
<option value="IL">Illinois</option>
Avec cela, la suite jQuery fera le changement:
$("select option[value='B']").attr("selected","selected");
Si vous décidez non d'inclure l'utilisation de l'attribut value
, vous devrez parcourir chaque option et vérifier manuellement sa valeur:
$("select option").each(function(){
if ($(this).text() == "B")
$(this).attr("selected","selected");
});
<select id="cars">
<option value='volvo'>volvo</option>
<option value='bmw'>bmw</option>
<option value='fiat'>fiat</option>
</select>
var make = "fiat";
$("#cars option[value='" + make + "']").attr("selected","selected");
Si vous utilisez JQuery, depuis la version 1.6, vous devez utiliser la méthode .prop ():
$('select option:nth(1)').prop("selected","selected");
Je parcourais les options, comparant le texte à ce que je souhaitais sélectionner, puis définissais l'attribut sélectionné sur cette option. Une fois que vous avez trouvé le bon, terminez l'itération (sauf si vous avez une sélection multiple).
$('#dropdown').find('option').each( function() {
var $this = $(this);
if ($this.text() == 'B') {
$this.attr('selected','selected');
return false;
}
});
Vous pouvez suivre la stratégie .selectedIndex de danielrmt, mais déterminer l'index en fonction du texte dans les balises d'option comme ceci:
$('#dropdown')[0].selectedIndex = $('#dropdown option').toArray().map(jQuery.text).indexOf('B');
Cela fonctionne sur le code HTML d'origine sans utiliser d'attributs de valeur.
Vous pouvez utiliser du DOM pur. Voir http://www.w3schools.com/htmldom/prop_select_selectedindex.asp
document.getElementById('dropdown').selectedIndex = 1;
mais jQuery peut aider:
$('#dropdown').selectedIndex = 1;
$('#select_id option:eq(0)').prop('selected', 'selected');
c'est bon
$(document).on('change', 'select', function () {
var value = $(this).val();
$(this).find('option[value="' + value + '"]').attr("selected", "selected");
})
Code:
var select = function(dropdown, selectedValue) {
var options = $(dropdown).find("option");
var matches = $.grep(options,
function(n) { return $(n).text() == selectedValue; });
$(matches).attr("selected", "selected");
};
Exemple:
select("#dropdown", "B");
Quelque chose dans le sens de ...
$('select option:nth(1)').attr("selected","selected");