Per*_*röm 2 html javascript jquery
我想实现类似的问题如何使用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>
Run Code Online (Sandbox Code Playgroud)
对此:
<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>
Run Code Online (Sandbox Code Playgroud)
li上的"current-page"类应该在select as中标记相应的选项selected.jQuery以及vanilla 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);
Run Code Online (Sandbox Code Playgroud)
我还会考虑使用<optgroup>而不是-前缀作为指示层次结构级别的方法.
| 归档时间: |
|
| 查看次数: |
4568 次 |
| 最近记录: |