Mam kontrolę select, a w zmiennej javascript mam ciąg tekstowy.
Używając jQuery chcę ustawić wybrany element kontrolki select, aby był elementem z opisem tekstowym, który mam (w przeciwieństwie do wartości, której nie mam).
Wiem, że ustawienie go według wartości jest dość trywialne. np.
$("#my-select").val(myVal);
Ale I'm trochę stumped na robienie tego przez opis tekstowy. Domyślam się, że musi istnieć sposób na wydobycie wartości z opisu tekstowego, ale mój mózg jest zbyt piątkowo popołudniowy, aby móc go rozpracować.
var text1 = 'Two';
$("select option").filter(function() {
//may want to use $.trim in here
return $(this).text() == text1;
}).prop('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<select>
<option value="0">One</option>
<option value="1">Two</option>
</select>
var text1 = 'Two';
$("select option").filter(function() {
//may want to use $.trim in here
return $(this).text() == text1;
}).attr('selected', true);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.4.0/jquery.min.js"></script>
<select>
<option value="0">One</option>
<option value="1">Two</option>
</select>
Zauważ, że podczas gdy to podejście będzie działać w wersjach powyżej 1.6, ale mniej niż 1.9, zostało ono zdeprecjonowane od 1.6. To nie będzie działać w jQuery 1.9+.
Funkcja val()
powinna obsługiwać oba przypadki.
$('select').val('1'); // selects "Two"
$('select').val('Two'); // also selects "Two"
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>
<select>
<option value="0">One</option>
<option value="1">Two</option>
</select>