2015-03-09 2 views
0

Я конвертирую неупорядоченный список элементов в меню выбора опций.Преобразование неупорядоченного списка для выбора ... но с завихрением

HTML-:

<div class="dropdown-container converted"> 
    <button class="button__black __small" data-dropdown="drop1" aria-controls="drop1" aria-expanded="false">Artist <img src="{site_url}/do-not-enter-or-modify-or-erase/site-theme/img/dropdown-arrow.png" alt="Dropdown" /></button> 
    <ul id="drop1" class="f-dropdown mega book-filter-dropdown category-dropdown" data-dropdown-content aria-hidden="true" tabindex="-1"> 
     <li><a href="#">Item 1</a></li> 
     <li class="active"><a class="active" href="#">Item 2</a></li> 
     <li><a href="#">Item 3</a></li> 
    </ul> 
</div> 

И Javascript:

// Create the dropdown base 
$("<select />").appendTo(".converted"); 

//Create default option "Go to..." 
$("<option />", { 
    "selected": "selected", 
    "value" : "catalog/products", 
    "text" : "All Artists" 
}).appendTo(".converted select"); 

// Populate dropdown with menu items 
$(".converted a").each(function() { 
    var el = $(this); 
    $("<option />", { 
    "value" : el.attr("href"), 
    "text" : el.text() 
    }).appendTo(".converted select"); 
}); 

$(".converted select").change(function() { 
    window.location = $(this).find("option:selected").val(); 
}); 

Я хотел бы элемент списка с классом «активных», который будет представлен в раскрывающемся списке выберите в качестве опции «выбран = выбран».

Как это сделать?

+0

Pls создать скрипку. – lshettyl

+1

Я не вижу элемента 'a' в вашем коде. Где они? Вы имеете в виду 'li'? Проверьте [this] (http://jsfiddle.net/03kh3nuL/) – DontVoteMeDown

+0

'" selected ": el.hasClass (" active "),' ... так где же «твист»? –

ответ

1

У вас должен быть attr selected=true|false. Либо смотреть на $.prop как в el.prop('selected', true|false) или передать значение при создании элемента:

$("<option />", { 
    "value" : el.attr("href"), 
    "text" : el.text(), 
    "selected": el.hasClass("active") 
}).appendTo(".converted select"); 
+0

Проблема в том, что элемент 'a' отсутствует. Я думаю, что OP относится к 'li', но он не уточнил это. – DontVoteMeDown

+1

Да, это одна проблема, но не вопрос, который он задал. –

+0

Моя ошибка. Я скорректировал код, добавив элемент. –

0

Вы можете достичь этого путем добавления чек на active класса в .each() части. Кроме того, я бы предложил удалить функцию .appendTo() из. each(), потому что добавление к DOM - довольно дорогостоящая операция, поэтому вам нужно создать массив элементов в .each(), а затем добавить этот массив за один раз.

Подумайте о том, что-то вроде этого:

var lis = $('#drop1').children('li'), 
    target = $('.target'), 
    options = [], 
    $element; 

lis.each(function(index, element){ 
    $element = $(element); 

    options.push($("<option />", { "value" : $element.attr("href"), "text" : $element.text(), "selected": $element.hasClass('active') })); 
}); 

target.append(options) 

Это можно увидеть на сайте здесь: http://jsfiddle.net/3n34g90q/