使用javascript将分层无序列表转换为选择列表
Convert a hierarchical unordered list to a select list using javascript
我想实现类似的问题如何将无序列表转换成漂亮的样式下拉使用jquery?,但使用分层ul列表。我想转换这个HTML:
<ul>
<li><a href="/">Home</a></li>
<li><a href="/about">About us</a>
<ul>
<li><a href="/about/staff">Staff</a></li>
<ul>
<li class="current-page"><a href="/about/staff/john-doe">John Doe</a></li>
<li><a href="/about/staff/jane-doe">Jane Doe</a></li>
</ul>
</ul>
</li>
<li><a href="/products">Products</a>
<ul>
<li><a href="/products/games">Games</a>
<ul>
<li><a href="/products/games/xbox">XBOX</a></li>
<li><a href="/products/games/ps3">PlayStation 3</a></li>
<li><a href="/products/games/ipad">iPad</a></li>
<li><a href="/products/games/iphone">iPhone</a></li>
</ul>
</li>
<li><a href="/products/hardware">Hardware</a>
<ul>
<li><a href="/products/hardware/controllers">Controllers</a></li>
<li><a href="/products/hardware/memory">Memory units</a></li>
</ul>
</li>
<li><a href="/products/upcoming">Upcoming</a></li>
</ul>
</li>
<li><a href="/contact">Contact us</a></li>
</ul>
:
<select>
<option value="/">Home</option>
<option value="/about">About us</option>
<option value="/about/staff">- Staff</option>
<option value="/about/staff/john-doe" selected>-- John Doe</option>
<option value="/about/staff/jane-doe">-- Jane Doe</option>
<option value="/products">Products</option>
<option value="/products/games">- Games</option>
<option value="/products/games/xbox">-- XBOX</option>
<option value="/products/games/ps3">-- PlayStation 3</option>
<option value="/products/games/ipad">-- iPad</option>
<option value="/products/games/iphone">-- iPhone</option>
<option value="/products/hardware">- Hardware</option>
<option value="/products/hardware/controllers">-- Controllers</option>
<option value="/products/hardware/memory">-- Memory</option>
<option value="/products/upcoming">- Upcoming</option>
<option value="/contact">Contact us</option>
</select>
li上的"current-page"类应该将选择的相应选项标记为selected
。jQuery和JavaScript都可以。
下面是一些jQuery代码,可以满足您的需求。因为我不知道你想把<select>
加到哪里,我就直接把它加到<body>
上。还有一个$('li')
选择器过于贪婪的问题(它将选择文档中的所有<li>
元素),但是很容易修复给定的关于<ul>
元素的父元素的知识,你已经发布。
(function($) { $(function() {
var $select = $('<select>')
.appendTo('body');
$('li').each(function() {
var $li = $(this),
$a = $li.find('> a'),
$p = $li.parents('li'),
prefix = new Array($p.length + 1).join('-');
var $option = $('<option>')
.text(prefix + ' ' + $a.text())
.val($a.attr('href'))
.appendTo($select);
if ($li.hasClass('current-page')) {
$option.attr('selected', 'selected');
}
});
});})(jQuery);
我也会考虑使用<optgroup>
代替-
前缀作为指示层次结构级别的一种方式。
相关文章:
- Immutablejs:将列表转换为映射
- 如何将逗号分隔的列表转换为<ul>列表
- 下划线,将对象列表转换为对象值数组
- 正在将无序列表转换为选择..但有一个转折
- angularjs $resource将查询资源列表转换为对象数组
- 将Wooccommerce属性下拉列表转换为可点击文本
- javascript的事件监听器将下拉列表转换为输入按钮
- 如何将数组的列表转换为json对象的列表
- 将URL的文本列表转换为可点击的HTML链接
- 将javascript变量列表转换为对象键/值对
- Javascript:将对象列表转换为关联数组
- 将 url 列表转换为导航窗格
- 将数字列表转换为带有 PHP 或 JS 后缀的特定价格格式
- 将选择列表转换为 Jquery UI 自动完成
- 将空格分隔的类列表转换为 Jquery 选择器的有效方法
- 将逗号分隔列表转换为无序列表
- 如何将选择下拉列表转换为 ul 下拉列表
- 将列表转换为 Json 数组
- 将不可变.js地图列表转换为列表列表,然后将其用作Google图表的数据
- 获取所有视频ID'使用YouTube API将从YouTube播放列表转换为PHP数组