2009-12-13 114 views
0

我有一个相当大的,三级深,菜单在这个例子中如何向上移动第三层元素并移除ul?

<ul class="nav"> 
    <li><a href="#">1</a> 
     <ul> 
      <li><a href="#">2</a> 
       <ul> 
        <li><a href="#">level 3</a></li> 
        <li><a href="#">level 3</a></li> 
        <li><a href="#">level 3</a></li> 
       </ul> 
      </li> 
      <li><a href="#">2</a> 
     </ul> 
    </li> 
</ul> 

有关的菜单,包括嵌套表像,我想有两个层面的工作只有这样我想删除第三ul和为其造型目的添加一个班级给其(以前)的孩子。

这可以用jQuery来完成吗?结果应该是这样的:

<ul class="nav"> 
    <li><a href="#">1</a> 
     <ul> 
      <li><a href="#">2</a></li> 
      <li class="third"><a href="#">level 3</a></li> 
      <li class="third"><a href="#">level 3</a></li> 
      <li class="third"><a href="#">level 3</a></li> 
      <li><a href="#">2</a></li> 
     </ul> 
    </li> 
</ul> 

任何帮助表示赞赏!

+0

你为什么不只是生成您希望在服务器上的标记? – 2009-12-13 14:36:21

+0

,因为它是动态生成的 – Taeke 2009-12-13 15:13:57

回答

3

这应做到:

$('ul ul ul').each(function() { 
    $(this).parent().after($(this).find('li').addClass('third')); 
    $(this).remove(); 
}); 

对于每一个第三级UL元素,插入UL的父元素之后的所有子李元素,然后取出UL本身。

+0

太棒了!这工作完美 – Taeke 2009-12-13 14:59:34

+0

因此,它是正确的! – ScottE 2009-12-13 15:56:45

0
$('ul ul ul').each(function() { 
    $(this).parent().after($(this).find('li').addClass('third')); 
    if (!$(this).parents('.exception').length){ 
    $(this).remove(); 
    } 
}); 
+0

没有真正起作用,.exception中的ul层次结构不会保持原样 – Taeke 2009-12-14 09:22:12

0
$('ul ul ul li').addClass('third').unwrap().each(function() { 
    $(this).parent().after($(this)) 
})