2009-12-13 91 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)) 
})