Make select option selected based on an unordered list using jQuery
Asked Answered
B

2

6

I've converted my unordered list into a select option list, however I'm not sure how can I make the 'selected' attribute added the option which correlates to the same hyperlink in the list.

Mark-up

<div class="navigation">
    <ul>
         <li><a href="foo.html">Foo</a></li>
         <li><a href="bar.html" class="selected">Bar</a></li>
         <li><a href="boo.html">Boo</a></li>
    </ul>
</div> 

Javascript

$('<select />').appendTo('.navigation');

// Populate dropdown with menu items
$('.navigation ul a').each(function() {
 var el = $(this);
 $('<option />', {
    "value"   : el.attr('href'),
    "text"    : el.text()
 }).appendTo('.navigation select');
});
// Navigate to page on select option
$('.navigation select').change(function() {
  window.location = $(this).find('option:selected').val();
});
// Hide navigation list
$('.navigation ul').hide(); 
Bondholder answered 19/12, 2012 at 23:13 Comment(0)
U
6

You can use hasClass method:

 $('<option />', {
    "value"      : el.attr('href'),
    "text"       : el.text(),
    "selected"   : el.hasClass('selected')
 }).appendTo('.navigation select');

http://jsfiddle.net/5V5rY/

Unthread answered 19/12, 2012 at 23:17 Comment(0)
W
-1

You seem to dynamically create the select element .

So you need to delegate the event to the closest static parent container to let it work..

$('.navigation select').change(function() {

supposed to be

$('.navigation').on('change', 'select',function() {

Also to select the value you can just do .val();

window.location = $(this).val();
Wetterhorn answered 19/12, 2012 at 23:15 Comment(1)
I think you misunderstood my question, but thanks for your input on the other part of my code.Bondholder

© 2022 - 2024 — McMap. All rights reserved.