jQuery конвертировать Select в переключатели?
Я пытаюсь конвертировать select boxes в переключатели на лету с помощью jquery, и я не уверен, что это лучший способ.
Пример HTML:
<form id="product">
<select name="data[123]">
<option value="1">First</option>
<option value="2">Second</option>
......
<option value="n">xxxxxx</option>
</select>
</form>
Я хочу преобразовать его при загрузке страницы с помощью jquery в:
<form id="product">
<input type="radio" name="data[123]" value="1" />
<label for="data[123]">First</label><br/>
<input type="radio" name="data[123]" value="2" />
<label for="data[123]">Second</label><br/>
......
<input type="radio" name="data[123]" value="n" />
<label for="data[123]">xxxxxx</label><br/>
</form>
И он должен быть динамическим, так что он будет циклически динамически для каждого окна выбора и каждого параметра внутри (так как разные продукты имеют разные параметры)
Я пытаюсь придумать лучший способ. Либо сначала получить многомерный массив всех значений, а затем построить переключатель.. или меняйте их местами по одному в цикле. В настоящее время предпринимаю попытку первого, но я думаю, что, возможно, переосмысливаю его:$(document).ready(function(){
//Get Exising Select Options
$('form#product select').each(function(i, select){
$(select[i]).find('option').each(function(j, option){
//alert($(option).text());
option[j] = [];
option[j]['text'] = $(option).text();
option[j]['val'] = $(option).val();
});
});
//Remove Select box
$('form#product select').remove();
});
Кто-нибудь пробовал это или есть какой-то секретный/более простой способ сделать это, который я упускаю?
2 ответа:
Я собрал это вместе и протестировал его в нескольких браузерах, все, кажется, справляются с этим хорошо. Он возьмет данные из элементов
<option>
и создаст<input/><label/><br/>
для каждого из них, а затем удалит поле выбора.//Get Exising Select Options $('form#product select').each(function(i, select){ var $select = $(select); $select.find('option').each(function(j, option){ var $option = $(option); // Create a radio: var $radio = $('<input type="radio" />'); // Set name and value: $radio.attr('name', $select.attr('name')).attr('value', $option.val()); // Set checked if the option was selected if ($option.attr('selected')) $radio.attr('checked', 'checked'); // Insert radio before select box: $select.before($radio); // Insert a label: $select.before( $("<label />").attr('for', $select.attr('name')).text($option.text()) ); // Insert a <br />: $select.before("<br/>"); }); $select.remove(); });