我开始编写一个函数来用自定义HTML列表替换选择框。我似乎无法让“:selected”选择器识别所选的选项。我尝试了一些方法,我的选择框确实有选定属性的选项;]
非常感谢任何帮助。
$('select').each(function(){
var $ulSelect = $('<ul />');
var $options;
var $numSelected = 0;
$options = $('option', this).map(function(index, element){
var $selectedClass = '';
if ($(element).is(':selected')) {
$numSelected++;
$selectedClass = ' class="selected"';
}
return $('<li data-value="'+ $(element).val() +'"'+ $selectedClass +'>'+ $(element).text() +'<a href="#" class="x-link"></a></li>');
}).appendTo($ulSelect);
var $ulSelectWrap = $('<div />')
.addClass('ul-select-wrap')
.prepend($ulSelect)
.prepend('<span class="selected">'+ $('option:eq(0)', this).text() + $activeText +'</span>');
$(this).hide().before($ulSelectWrap);
});
答案 0 :(得分:0)
我已经在jsFiddle中检查了你的代码,发现没有选择一个实际上被选中的元素的问题。我遇到的问题是你不能.appendTo
一个数组(由.map()返回)。所以我建议改用:
$.each($options, function() {
$(this).appendTo($ulSelect);
});
我认为另一个问题是使用$('option:eq(0)', this)
代替$('option:selected', this)
;前者始终将第一个选项显示为活动(尽管只有li
元素对应于所选元素正确地具有selected
类。
检查the demo以查看代码的更新版本。