我有一个像这样的多级列表:
<ul>
<li>Item 1
<ul>
<li>Item 1's 1st Child
<ul>
<li>Item 1's 1st Grandchild
<ul>
<li>Item 1's Grand Grandchild</li>
</ul>
</li>
<li>Item 1's 2nd Grandchild</li>
<li>Item 1's 3rd Grandchild</li>
</ul>
</li>
<li>Item 1's 2nd Child</li>
<li>Item 1's 3rd Child</li>
</ul>
</li>
<li>Item 2</li>
</ul>
我希望每个li
根据他们的位置拥有“等级”等级。结果是这样的:
<ul>
<li class="level-1">Item 1
<ul>
<li class="level-2">Item 1's 1st Child
<ul>
<li class="level-3">Item 1's 1st Grandchild
<ul>
<li class="level-4">Item 1's Grand Grandchild</li>
</ul>
</li>
<li class="level-3">Item 1's 2nd Grandchild</li>
<li class="level-3">Item 1's 3rd Grandchild</li>
</ul>
</li>
<li class="level-2">Item 1's 2nd Child</li>
<li class="level-2">Item 1's 3rd Child</li>
</ul>
</li>
<li class="level-1">Item 2</li>
</ul>
有没有办法用jQuery实现这个目标?
非常感谢你的关注。
答案 0 :(得分:3)
由于DOM遍历而不是最快的,但是,你可以用以下内容完成:
$("li").each(function() {
$(this).addClass("level-" + ($(this).parents("li").length+1));
});
答案 1 :(得分:2)
假设您只有4个级别的列表
$("ul > li").addClass("level-1");
$("li.level-1 > ul > li").addClass("level-2");
$("li.level-2 > ul > li").addClass("level-3");
$("li.level-3 > ul > li").addClass("level-4");
也许有更多的程序化方式来做到这一点&amp;允许任意深度,但这很快。
答案 2 :(得分:2)
认为这是一个通用的解决方案:
var current = $('ul:first');
var depth = 1;
while (current.length) {
current = current.children('li').addClass('level-' + depth++).children('ul');
};
答案 3 :(得分:0)
我会玩...你总是能让它递归:)
$(function() {
addLevel($('ul:first'));
});
function addLevel($ul, level) {
( ! level ) ? level = 1 : level += 1;
$ul.children('li').each(function() {
$(this).addClass('level-' + level);
$(this).children('ul').each(function() { addLevel($(this), level) });
});
}