3

I have a select box and one string and i would select a option by string. For example string="Volvo" and select box like this:

 <select>
  <option value="v1">Volvo</option>
  <option value="v2">Saab</option>
  <option value="v3">Mercedes</option>
  <option value="v4">Audi</option>
</select> 

Can anyone help me please?

Gennaro Schiano
  • 150
  • 1
  • 4

2 Answers2

6

Use :contains() pseudo-class selector to get option which contains certain string. And for updating checked property use prop() method.

$('option:contains("Volvo")').prop('selected', true);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
  <option value="v1">Volvo</option>
  <option value="v2">Saab</option>
  <option value="v3">Mercedes</option>
  <option value="v4">Audi</option>
</select>

For exact match use filter() method, since :contains() not check for exact match.

$('option').filter(function() {
  // check trimmed text for filtering 
  return $.trim($(this).text()) == "Mercedes";
}).prop('selected', true);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
  <option value="v1">Volvo</option>
  <option value="v2">Saab</option>
  <option value="v3">Mercedes</option>
  <option value="v4">Audi</option>
</select>
Jonathan
  • 6,741
  • 7
  • 52
  • 69
Pranav C Balan
  • 113,687
  • 23
  • 165
  • 188
1

You could use the :contains selector to achieve this:

var $option = $('select option:contains("Volvo")');

Or, to use a variable for the value:

var text = 'Volvo';
var $option = $('select option:contains("' + text + '")');

Alternatively you could use filter() to ensure an exact match on the required value:

var text = 'Volvo';
var $option = $('select option').filter(function() {
    return $(this).text().trim() == text;
});

From there you just need to set the checked property to true:

$option.prop('checked', true);
Rory McCrossan
  • 331,213
  • 40
  • 305
  • 339