2009-12-15 1 views
0

Я пытаюсь клонировать список выбора в стандартный список ul для расширенного манипулирования/стилизации окна javascript.преобразовать список выбора в список ul

В принципе, если я это делаю: $ ("# calendar select option"). Clone(). AppendTo ("# test");

я получаю следующий HTML

<ul id="test"> 
<option>All Types</option> 
<option>Installation</option> 
<option>Music</option> 
<option>Performing Arts</option> 
<option>Season</option> 
<option>YUIYIYI</option> 
</ul> 

Как я потом изменить все теги <option> быть <li> теги, не теряя все значения?

Любая помощь, очень удобная.

А.

ответ

0

вместо ...

$("#calendar select option").clone().appendTo("#test"); 

попробовать ...

$("#calendar select option").each(function(){ 
    $("<li>" + $(this).text() + "</li>").appendTo("#test"); 
}); 

Короткий и сладкий.

+0

прилагая кучу раз довольно медленно. – KyleFarris

+0

Вероятно, правда, но учитывая размер выборки, который он опубликовал, я сомневаюсь, что это была бы заметная задержка с использованием нескольких приложений. – Ryan

0
$("#calendar select option").each(
    function(){ 
     html = $(this).html(); 
     e = document.createElement('li'); 
     e.setAttribute('innerHTML',html); 
     $("#test").append(e); 
    } 
); 

Не проверено, но это должно сделать вас в основном. Удачи!

+0

Это могучий un-jquery из вас, чтобы использовать такие вещи, как 'document.createElement ('li')' ... Ничего плохого в этом ... просто плохо. – KyleFarris

+0

Не будем забывать, что jQuery * is * javascript :) createElement - это, на мой взгляд, правильный инструмент для этой конкретной задачи. – inkedmn

1

Что-то, как это должно работать:

var list_items = ''; 
$("#calendar select option").each(function() { 
    var $this = $(this); 
    list_items += '<li rel="'+$this.val()+'">'+$this.html()+'</li>'; 
}); 
$("#test").append($(list_items)); 

Так же, как примечание стороны, от того, что я помню, конкатенация и один Append, как правило, быстрее, чем связка или массив добавления записей выталкивает.

Заслуга @cballou для отна тегов части ...

2

Я бы порекомендовал вам получить право сформированного li элементов разметки путем обхода параметры.

Пример использования $.map:

var listItems = $("#calendar select option").map(function(){ 
    return '<li>' + $(this).text() + '</li>'; 
}).get().join(""); 

$("#test").append(listItems); 

Проверьте выше фрагмент кода here.

+0

Отличный ответ. Мне действительно нужно больше использовать метод «map». – KyleFarris

+0

Отлично, спасибо за помощь всем. Работает очарование .... – 2009-12-16 09:20:59

1

Мое мнение таково, что значения параметра следует рассматривать как отн теги для вашего «обычай выбора»:

var listitems = []; 
$("#calendar select option").each(function() { 
    var $this = $(this); 
    listitems.push('<li rel="' + $this.val() + '">' + $this.text() + '</li>'); 
}); 

$('#test').html(listitems.join("")); 
+1

Отличная идея с тегом rel. Размышление о следующем шаге - хорошая работа ... – KyleFarris