You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么这段jQuery列表折叠切换代码无法正常工作?

问题分析与解决

核心问题:HTML嵌套列表结构不符合规范

代码不生效的根本原因是嵌套列表的HTML写法错误。在HTML规范里,<ol>(有序列表)的直接子元素只能是<li>,子列表必须嵌套在<li>内部,而不是和<li>同级放置。

你原来的代码里,子<ol>是和"Coffee""Tea"的<li>平级的,这就导致JS中$(this).children('ol')根本找不到对应的子列表——因为它不是点击的<li>的子节点。

修正后的代码

修正HTML结构

把包含子列表的<li>改成包裹文本和子列表的结构:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<ol>
  <li>
    Coffee
    <ol>
      <li>One</li>
      <li>Two</li>
      <li>Three</li>
    </ol>
  </li>
  <li>
    Tea
    <ol>
      <li>One</li>
      <li>Two</li>
      <li>Three</li>
    </ol>
  </li>
  <li>Milk</li>
  <li>Cool</li>
</ol>

JS代码无需修改(结构修正后即可生效)

$(document).ready(function() {
  $('ol ol').hide();

  $('li').click(function() {
    $(this).children('ol').toggle();
  });
});

额外优化建议

如果不想让没有子列表的<li>(比如Milk、Cool)也响应点击事件,可以给包含子列表的<li>添加类名,缩小事件绑定范围:

  1. HTML修改:
<li class="has-submenu">
  Coffee
  <ol>...</ol>
</li>
<li class="has-submenu">
  Tea
  <ol>...</ol>
</li>
  1. JS修改:
$(document).ready(function() {
  $('ol ol').hide();

  $('li.has-submenu').click(function() {
    $(this).children('ol').toggle();
  });
});

内容的提问来源于stack exchange,提问作者Anna_B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 15:07:23