如何以此格式转换无序列表
<ul class="selectdropdown">
<li><a href="one.html" target="_blank">one</a></li>
<li><a href="two.html" target="_blank">two</a></li>
<li><a href="three.html" target="_blank">three</a></li>
<li><a href="four.html" target="_blank">four</a></li>
<li><a href="five.html" target="_blank">five</a></li>
<li><a href="six.html" target="_blank">six</a></li>
<li><a href="seven.html" target="_blank">seven</a></li>
</ul>
进入此格式的下拉列表
<select>
<option value="one.html" target="_blank">one</option>
<option value="two.html" target="_blank">two</option>
<option value="three.html" target="_blank">three</option>
<option value="four.html" target="_blank">four</option>
<option value="five.html" target="_blank">five</option>
<option value="six.html" target="_blank">six</option>
<option value="seven.html" target="_blank">seven</option>
</select>
使用jQuery?
编辑:从选择/下拉列表中选择条目时,链接应自动在新窗口或标签中打开。我还希望能够将其设置为:http://www.dfc-e.com/metiers/multimedia/opensource/jqtransform/
答案 0 :(得分:20)
$(function() {
$('ul.selectdropdown').each(function() {
var $select = $('<select />');
$(this).find('a').each(function() {
var $option = $('<option />');
$option.attr('value', $(this).attr('href')).html($(this).html());
$select.append($option);
});
$(this).replaceWith($select);
});
});
修改强>
与您要在页面加载时运行的任何jQuery代码一样,您必须将其包含在$(document).ready(function() { ... });
块内,或者在其较短版本$(function() { ... });
内。我更新了这个函数以显示它。
修改强>
我的代码中还有 错误,试图从li元素中获取href。
答案 1 :(得分:13)
$('ul.selectdropdown').each(function() {
var select = $(document.createElement('select')).insertBefore($(this).hide());
$('>li a', this).each(function() {
var a = $(this).click(function() {
if ($(this).attr('target')==='_blank') {
window.open(this.href);
}
else {
window.location.href = this.href;
}
}),
option = $(document.createElement('option')).appendTo(select).val(this.href).html($(this).html()).click(function() {
a.click();
});
});
});
在回复您的上一条评论时,我对其进行了一些修改,但尚未对其进行测试。让我知道。
$('ul.selectdropdown').each(function() {
var list = $(this), select = $(document.createElement('select')).insertBefore($(this).hide());
$('>li a', this).each(function() {
var target = $(this).attr('target'),
option = $(document.createElement('option'))
.appendTo(select)
.val(this.href)
.html($(this).html())
.click(function(){
if(target==='_blank') {
window.open($(this).val());
}
else {
window.location.href = $(this).val();
}
});
});
list.remove();
});
答案 2 :(得分:2)
此解决方案也适用于IE并使用所选项目(在锚标记中)。
$('ul.selectdropdown').each(function(){
var list=$(this),
select=$(document.createElement('select')).insertBefore($(this).hide()).change(function(){
window.location.href=$(this).val();
});
$('>li a', this).each(function(){
var option=$(document.createElement('option'))
.appendTo(select)
.val(this.href)
.html($(this).html());
if($(this).attr('class') === 'selected'){
option.attr('selected','selected');
}
});
list.remove();
});
答案 3 :(得分:0)
感谢大家发布代码。我的情况类似,但我的情况是响应性,对于x-size,它将切换到下拉列表,如果不是x-size,则使用csswatch检查具有某些元素的“显示”属性设置的宽度量(例如:740px)。我想我会为感兴趣的人分享这个解决方案。这就是我与Tatu'代码的结合。而不是替换html,我创建然后隐藏新的HTML然后只在必要时添加它们:
var $list = $('ul.list');
(listFunc = function(display){
//Less than x-size turns it into a dropdown list
if(display == 'block'){
$list.hide();
if($('.sels').length){
$('.sels').show();
} else {
var $select = $('<select class="sels" />');
$list.find('a').each(function() {
var $option = $('<option />');
$option.attr('value', $(this).attr('href')).html($(this).html());
$select.append($option);
});
$select.insertAfter($list);
$('.sels').on('change', function(){
window.location = this.value;
});
}
} else {
$('.sels').hide();
$list.show();
}
})(element.css('display'));
element.csswatch({
props: 'display'
}).on('css-change', function (event, change) {
return listFunc(change.display);
});
答案 4 :(得分:0)
我最近创建了一个解决方案,其中ul转换,几乎完全模仿选择。
它已经在搜索select的选项并支持活动状态。只需添加一个名为active的类,即可选择该选项。
它处理键盘导航。
在这里查看代码:GitHub Code
这里有一个实例:Code Example
无序列表必须采用以下格式:
<ul id="...">
<li><a href="...">...</a></li>
<li><a href="...">...</a></li>
<li><a class="active" href="...">...</a></li>
...
</ul>
要转换ul以选择只调用:
$(window).on("load resize", function() {
ulToSelect($("ul#id"), 767);
});
其中#id是无序列表的id,767是转换窗口的最小宽度。如果您希望仅针对手机或平板电脑进行转换,这非常有用。