如何addClass li包装ul

问题描述 投票:0回答:2

我在Creating dropdown menu from simple list获得了代码

  <ul id="menu">
      <li><a href="#">Menu 1</a></li>
      <li><a href="#">Menu 2</a></li>
      <li><a href="#">_Submenu x</a></li>
      <li><a href="#">_Submenu y</a></li>
      <li><a href="#">Menu 3</a></li>
 </ul>

我试图添加类li包装器ul,已添加

var prev;
$('#nav li').each(function(){
    if(/^_/.test (this.textContent) && prev){
        prev.appendChild(this);
        $("#nav ul li ul").prev().addClass("sub-icon");
        $("#nav ul li ul li a").each(function(){
        $(this).text($(this).text().replace (/[_]/,""))
        })
    }else{
        prev = this.appendChild($('<ul class ="sub-nav">')[0]);
    }
}).find('ul:empty').remove();

并生成html结构如下:

  <ul id="nav">
      <li><a class="sub-icon" href="#">Menu 1</a></li>
      <li><a class="sub-icon" href="#">Menu 2</a>
         <ul>
            <li><a href="#">Submenu x</a></li>
            <li><a href="#">Submenu y</a></li>
         </ul>
      </li>
      <li><a class="sub-icon" href="#">Menu 3</a></li>
 </ul> 

我怎样才能生成这样的结构,只添加一个类子图标

 <ul id="nav">
      <li><a href="#">Menu 1</a></li>
      <li><a class="sub-icon" href="#">Menu 2</a>
         <ul>
            <li><a href="#">Submenu x</a></li>
            <li><a href="#">Submenu y</a></li>
         </ul>
      </li>
      <li><a href="#">Menu 3</a></li>
 </ul>

谢谢您的帮助。

jquery list drop-down-menu dropdown
2个回答
0
投票

所以你希望在包含liul中添加一个类...

尝试:

$("#nav ul li ul").parent("li").addClass("sub-icon");

0
投票

我会通过过滤sub并首先修改它们的文本以不同的方式处理这个问题。然后循环遍历sub并附加到sub <ul>(如果它已经存在)或添加它(如果它不存在)

// filter out the sub menu items and remove the `_`
var $subs = $('#nav li').filter(function(){
  var $link = $(this).find('a'),
  txt = $link.text(),
  isSub = txt[0]==='_';
  if(isSub){
    $link.text(txt.slice(1))
  }
  return isSub;  
});
// loop over sub menu items
$subs.each(function(){
  var $prev = $(this).prev(),
    $prevUl = $prev.find('ul');
  if(!$prevUl.length){
    // if prev `<li>` doesn't have sub `<ul>` add it and add the link class
    $prevUl = $('<ul>').appendTo($prev);
    $prev.find('a').addClass('sub-icon')
  }
  $prevUl.append(this);
  
})
a.sub-icon{color:red}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul id="nav">
      <li><a href="#">Menu 1</a></li>
      <li><a href="#">Menu 2</a></li>
      <li><a href="#">_Submenu x</a></li>
      <li><a href="#">_Submenu y</a></li>
      <li><a href="#">Menu 3</a></li>
 </ul>
© www.soinside.com 2019 - 2024. All rights reserved.