Reputation: 488344
Suppose I have a drop-down list like:
<select id='list'>
<option value='1'>Option A</option>
<option value='2'>Option B</option>
<option value='3'>Option C</option>
</select>
Given the value '2'
(i.e., using a specific value, not necessarily the selected one), what selector can I use to get "Option B"?
I tried $("#list[value='2']").text();
, but it is not working.
Upvotes: 1286
Views: 1100875
Reputation: 26
you can use $("#list option[value='2']").text(); for text of the option with value equal to 2 and you can use $("#list option:selected").text(); for text of the selected option
Upvotes: 0
Reputation: 1057
Use:
function selected_state(){
jQuery("#list option").each(function(){
if(jQuery(this).val() == "2"){
jQuery(this).attr("selected","selected");
return false;
}else
jQuery(this).removeAttr("selected","selected"); // For toggle effect
});
}
jQuery(document).ready(function(){
selected_state();
});
Upvotes: 9
Reputation: 92347
Try
[...list.options].find(o=> o.value=='2').text
let text = [...list.options].find(o=> o.value=='2').text;
console.log(text);
<select id='list'>
<option value='1'>Option A</option>
<option value='2'>Option B</option>
<option value='3'>Option C</option>
</select>
Upvotes: 0
Reputation: 545985
It's looking for an element with id list
which has a property value
equal to 2
.
What you want is the option
child of the list
:
$("#list option[value='2']").text()
Upvotes: 1148
Reputation: 1598
You can get one of following ways
$("#list").find('option').filter('[value=2]').text()
$("#list").find('option[value=2]').text()
$("#list").children('option[value=2]').text()
$("#list option[value='2']").text()
$(function(){
console.log($("#list").find('option').filter('[value=2]').text());
console.log($("#list").find('option[value=2]').text());
console.log($("#list").children('option[value=2]').text());
console.log($("#list option[value='2']").text());
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<select id='list'>
<option value='1'>Option A</option>
<option value='2'>Option B</option>
<option value='3'>Option C</option>
</select>
Upvotes: 2
Reputation: 151
You can get selected option text by using function .text();
you can call the function like this :
jQuery("select option:selected").text();
Upvotes: 14
Reputation: 3305
This worked perfectly for me, I was looking for a way to send two different values with options generated by MySQL, and the following is generic and dynamic:
$(this).find("option:selected").text();
As mentioned in one of the comments. With this I was able to create a dynamic function that works with all my selection boxes that I want to get both values, the option value and the text.
Few days ago I noticed that when updating the jQuery from 1.6 to 1.9 of the site I used this code, this stop working... probably was a conflict with another piece of code... anyway, the solution was to remove option from the find() call:
$(this).find(":selected").text();
That was my solution... use it only if you have any problem after updating your jQuery.
Upvotes: 135
Reputation: 3736
If there is only one select tag in on the page then you can specify select inside of id 'list'
jQuery("select option[value=2]").text();
To get selected text
jQuery("select option:selected").text();
Upvotes: 37
Reputation: 898
This is an old Question which has not been updated in some time the correct way to do this now would be to use
$("#action").on('change',function() {
alert($(this).find("option:selected").text()+' clicked!');
});
I hope this helps :-)
Upvotes: 19
Reputation: 45465
A tip: you can use below code if your value is dynamic:
$("#list option[value='"+aDynamicValue+"']").text();
Or (better style)
$("#list option").filter(function() {
return this.value === aDynamicValue;
}).text();
As mentioned in jQuery get specific option tag text and placing dynamic variable to the value
Upvotes: 5
Reputation:
If you'd like to get the option with a value of 2, use
$("#list option[value='2']").text();
If you'd like to get whichever option is currently selected, use
$("#list option:selected").text();
Upvotes: 1275
Reputation: 509
I was looking for getting val by internal field name instead of ID and came from google to this post which help but did not find the solution I need, but I got the solution and here it is:
So this might help somebody looking for selected value with field internal name instead of using long id for SharePoint lists:
var e = $('select[title="IntenalFieldName"] option:selected').text();
Upvotes: 5
Reputation: 1097
I needed this answer as I was dealing with a dynamically cast object, and the other methods here did not seem to work:
element.options[element.selectedIndex].text
This of course uses the DOM object instead of parsing its HTML with nodeValue, childNodes, etc.
Upvotes: 4
Reputation: 145368
As an alternative solution, you can also use a context part of jQuery selector to find <option>
element(s) with value="2"
inside the dropdown list:
$("option[value='2']", "#list").text();
Upvotes: 3
Reputation: 1182
I wanted a dynamic version for select multiple that would display what is selected to the right (wish I'd read on and seen $(this).find
... earlier):
<script type="text/javascript">
$(document).ready(function(){
$("select[showChoices]").each(function(){
$(this).after("<span id='spn"+$(this).attr('id')+"' style='border:1px solid black;width:100px;float:left;white-space:nowrap;'> </span>");
doShowSelected($(this).attr('id'));//shows initial selections
}).change(function(){
doShowSelected($(this).attr('id'));//as user makes new selections
});
});
function doShowSelected(inId){
var aryVals=$("#"+inId).val();
var selText="";
for(var i=0; i<aryVals.length; i++){
var o="#"+inId+" option[value='"+aryVals[i]+"']";
selText+=$(o).text()+"<br>";
}
$("#spn"+inId).html(selText);
}
</script>
<select style="float:left;" multiple="true" id="mySelect" name="mySelect" showChoices="true">
<option selected="selected" value=1>opt 1</option>
<option selected="selected" value=2>opt 2</option>
<option value=3>opt 3</option>
<option value=4>opt 4</option>
</select>
Upvotes: 2
Reputation: 387
$("#list option:selected").each(function() {
alert($(this).text());
});
for multiple selected value in the #list
element.
Upvotes: 37
Reputation: 1938
While "looping" through dynamically created select elements with a .each(function()...): $("option:selected").text();
and $(this + " option:selected").text()
did not return the selected option text - instead it was null.
But Peter Mortensen's solution worked:
$(this).find("option:selected").text();
I do not know why the usual way does not succeed in a .each()
(probably my own mistake), but thank you, Peter. I know that wasn't the original question, but am mentioning it "for newbies coming through Google."
I would have started with $('#list option:selected").each()
except I needed to grab stuff from the select element as well.
Upvotes: 9
Reputation: 1667
Based on the original HTML posted by Paolo I came up with the following.
$("#list").change(function() {
alert($(this).find("option:selected").text()+' clicked!');
});
It has been tested to work on Internet Explorer and Firefox.
Upvotes: 108
Reputation: 188
I wanted to get the selected label. This worked for me in jQuery 1.5.1.
$("#list :selected").text();
Upvotes: 17
Reputation: 95314
Try the following:
$("#list option[value=2]").text();
The reason why your original snippet wasn't working is because your OPTION
tags are children to your SELECT
tag, which has the id
list
.
Upvotes: 24