Paolo Bergantino
Paolo Bergantino

Reputation: 488344

jQuery get specific option tag text

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

Answers (23)

Archil Dekanosidze
Archil Dekanosidze

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

Mary Daisy Sanchez
Mary Daisy Sanchez

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

Zakaria Binsaifullah
Zakaria Binsaifullah

Reputation: 124

Try this:

jQuery("#list option[value='2']").text()

Upvotes: 2

Kamil Kiełczewski
Kamil Kiełczewski

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

nickf
nickf

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

Anfath Hifans
Anfath Hifans

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

Dilipkumar63
Dilipkumar63

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

raphie
raphie

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

Beena Shetty
Beena Shetty

Reputation: 3736

  1. 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();
    
  2. To get selected text

    jQuery("select option:selected").text();
    

Upvotes: 37

mindmyweb
mindmyweb

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

Alireza Fattahi
Alireza Fattahi

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

Gabejazz
Gabejazz

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

F. M.
F. M.

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

Avinash Saini
Avinash Saini

Reputation: 1243

$(this).children(":selected").text()

Upvotes: 17

Martin Clemens Bloch
Martin Clemens Bloch

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

VisioN
VisioN

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

gordon
gordon

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;'>&nbsp;</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

m3ct0n
m3ct0n

Reputation: 387

$("#list option:selected").each(function() {
   alert($(this).text());
});  

for multiple selected value in the #list element.

Upvotes: 37

eon
eon

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

asyadiqin
asyadiqin

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

Dilantha
Dilantha

Reputation: 188

I wanted to get the selected label. This worked for me in jQuery 1.5.1.

$("#list :selected").text();

Upvotes: 17

Mon
Mon

Reputation: 131

$("#list [value='2']").text();

leave a space after the id selector.

Upvotes: 13

Andrew Moore
Andrew Moore

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

Related Questions