Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从divs显示/隐藏列表ul_Javascript_Jquery_Html - Fatal编程技术网

Javascript 从divs显示/隐藏列表ul

Javascript 从divs显示/隐藏列表ul,javascript,jquery,html,Javascript,Jquery,Html,我有以下代码: <ul> <div class="sub_cat_box"> <li class="current"><a href="#">Cat 1</a></li> <ul> <li><a href="#">Prod1</a></li> <li><a href="#">Prod1</a>

我有以下代码:

<ul>
 <div class="sub_cat_box"> 

 <li class="current"><a href="#">Cat 1</a></li> 
   <ul> 
     <li><a href="#">Prod1</a></li> 
     <li><a href="#">Prod1</a></li> 
   </ul> 

 </div> 

 <div class="sub_cat_box"> 

 <li class="current"><a href="#">Cat 2</a></li> 
   <ul> 
     <li><a href="#">Prod1</a></li> 
     <li><a href="#">Prod1</a></li> 
   </ul> 

  </div> 
</ul> 

我想在单击时显示/隐藏每个子项。我尝试使用jQuery,但没有成功。

使用jQuery使用类选择器选择li元素,然后将事件处理程序绑定到click函数。绑定函数应该找到与所选元素相关的下一个ul,并对其调用方法。默认情况下,jQuery toggle方法将切换元素的可见性:

$(".current").click(function(){
  $(this).next("ul").toggle();
});
工作示例:

使用以下命令:

$(document).on("click", "li.current > a", function(){
   $(this).next().slideToggle();
});

您可以这样做:

$('.current').next('ul').hide();​​​ // Make them hide by default
  $('.current').click(function(){
     $(this).next('ul').slideToggle();
  });
$(".current").click(function(e){
     $(this).find('ul').toggle();
})
试试这个:

$("ul > li.current").on('click', 'a', function(){
      $('ul.class').children().toggle();
    });

你的ul课程在哪里。我认为这是最干净的jQuery代码。

您的HTML不正确

请尝试使用此HTML结构:

<ul>
 <li class="current">
    <a href="javascript: toggleChildren('cat1');">Cat 1</a>
    <div class="sub_cat_box" id="cat1">
      <ul> 
        <li><a href="#">Prod1</a></li> 
        <li><a href="#">Prod1</a></li> 
      </ul> 
    </div>
  </li> 
</ul>
CSS:


您的HTML无效,只有ul中允许使用il,并且div和其他uls必须位于lis中。应该是这样的:

<ul>

    <li class="current"><div class="sub_cat_box"> 
       <a href="#">Cat 1</a>
       <ul> 
         <li><a href="#">Prod1</a></li> 
         <li><a href="#">Prod1</a></li> 
       </ul> 
       </div> 
      </li> 
     <li class="current">     
      <div class="sub_cat_box"> <a href="#">Cat 2</a> 
       <ul> 
         <li><a href="#">Prod1</a></li> 
         <li><a href="#">Prod1</a></li> 
       </ul>         
      </div> 
    </li>
    </ul> 

-1他根本没有尝试,这就是我从他的问题中读到的。你的HTML片段看起来无效;建议您验证它,然后将其包含在问题中。在锚定标记上而不是在li上处理单击事件非常重要,因为锚定标记已经有关联的事件,在您的情况下,该事件将附加到url位置,并在浏览器上添加不必要的历史记录条目。因此,那里的返回值为false。并且您的html是未验证的。你不能让ul在ul里面,除非他们在李的里面。
.sub_cat_box {display: none;}
<ul>

    <li class="current"><div class="sub_cat_box"> 
       <a href="#">Cat 1</a>
       <ul> 
         <li><a href="#">Prod1</a></li> 
         <li><a href="#">Prod1</a></li> 
       </ul> 
       </div> 
      </li> 
     <li class="current">     
      <div class="sub_cat_box"> <a href="#">Cat 2</a> 
       <ul> 
         <li><a href="#">Prod1</a></li> 
         <li><a href="#">Prod1</a></li> 
       </ul>         
      </div> 
    </li>
    </ul> 
$(".current").click(function(e){
     $(this).find('ul').toggle();
})
$('li.current a').click(function(){
  $(this).parent().next('ul').slideToggle(); // or
  //$(this).parent().next('ul').toggle();
});