2009-08-21 11 views
40

Ich habe folgend htmlJQuery das ausgewählte Attribut auf einer Auswahlliste Einstellung

<select id="dropdown"> 
    <option>A</option> 
    <option>B</option> 
    <option>C</option> 
</select> 

Ich habe die Zeichenfolge „B“ so dass ich die ausgewählt attrribute darauf einstellen will, so wird es sein:

<select id="dropdown"> 
    <option>A</option> 
    <option selected="selected">B</option> 
    <option>C</option> 
</select> 

Wie würde ich das in JQuery tun?

Antwort

105

Wenn Sie Ihre HTML-modifizierende etwas nicht stört das value Attribut der Optionen gehören, können Sie deutlich den Code reduzieren notwendig Dazu:

<option>B</option> 

zu

<option value="B">B</option> 

Dies wird hilfreich sein, wenn Sie so etwas wie tun:

<option value="IL">Illinois</option> 

Damit jQuery die folgen wird die Änderung vornehmen:

$("select option[value='B']").attr("selected","selected"); 

Wenn Sie nicht umfassen die Verwendung von entscheiden Wenn Sie das Attribut value verwenden, müssen Sie die einzelnen Optionen durchlaufen und den Wert manuell überprüfen:

+14

Nach dem Hinzufügen der 'value' Attribute kann die Auswahl auch wie folgt vorgenommen werden:' $ ("# dropdown"). Val ("B"); ' –

+0

+1 - genau das habe ich gesucht. auch, +1 @jorn – Jason

+0

Hallo * @ Jonathan Sampson *: Schöne Lösung. Alle anderen Dinge empfehlen die Einstellung .val(), aber das schien einfach nicht für mich zu funktionieren. – MikeSchinkel

1

Sie können reines DOM verwenden. Siehe http://www.w3schools.com/htmldom/prop_select_selectedindex.asp

document.getElementById('dropdown').selectedIndex = 1; 

aber jQuery helfen:

$('#dropdown').selectedIndex = 1; 
+4

Dies setzt voraus, dass man weiß, sein kann, welches Element den gewünschten Wert hat. Das ist nicht immer der Fall, wenn die Liste dynamisch generiert wird. – tvanfosson

2

ich durch die Optionen durchlaufen würde, zu vergleichen, den Text zu, was ich will zu wählen, dann wählen Sie die gewünschte Attribut auf diese Option. Sobald Sie den richtigen gefunden haben, beenden Sie die Iteration (es sei denn, Sie haben einen Multiselect).

$('#dropdown').find('option').each(function() { 
     var $this = $(this); 
     if ($this.text() == 'B') { 
     $this.attr('selected','selected'); 
     return false; 
     } 
}); 
+0

Gibt es einen Grund, .find() statt $ ('# dropdown option') zu verwenden? Effizienter? Das "var $ this" Zeug sieht auch für mich falsch aus ... –

+1

Ich denke der Unterschied ist hauptsächlich stilistisch. Unter der Haube würde ich erwarten, dass sie im Grunde genommen genauso funktionieren. Holen Sie sich eine Sammlung, filtern Sie sie. Ich habe begonnen, $ this zu verwenden, um einen Verweis auf das jQuery-Objekt zu halten. Ich habe auch Selbst gesehen (oder $ Selbst), aber ich denke, das ist weniger klar. – tvanfosson

0

Etwas nach dem Vorbild von ...

$('select option:nth(1)').attr("selected","selected"); 
1

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

Beispiel:

select("#dropdown", "B"); 
10
<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"); 
2

Sie können die .selectedIndex Strategie von danielrmt, folgen aber den Index auf der Grundlage der Text innerhalb der Option-Tags wie folgt ermitteln:

$('#dropdown')[0].selectedIndex = $('#dropdown option').toArray().map(jQuery.text).indexOf('B'); 

Dies funktioniert mit dem ursprünglichen HTML ohne Verwendung von Wertattributen.

1
$('#select_id option:eq(0)').prop('selected', 'selected'); 

seine gute

4

Wenn Sie JQuery verwenden, da die 1,6 Sie die verwenden.Prop() Methode:

$('select option:nth(1)').prop("selected","selected"); 
1

dies eine Lösung

$(document).on('change', 'select', function() { 
      var value = $(this).val(); 
      $(this).find('option[value="' + value + '"]').attr("selected", "selected"); 
     }) 
Verwandte Themen