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

如何实现点击显示菜单孙子元素?Drupal7+Jquery3.3.1环境求助

别担心,jQuery 3.3.1完全支持识别孙子元素,问题大概率不是版本本身的锅,咱们一步步排查解决:

  • 先确认选择器是否准确
    你提到菜单是Drupal 7的区块,从给出的HTML看,顶级li有leaf类,但孙子元素的类可能不一样(毕竟你说CSS没用到这个类)。先打开浏览器开发者工具(F12),找到菜单的完整DOM结构,看看孙子元素的层级和类名。比如如果结构是ul.menu > li > ul > li,那选择孙子元素可以用.menu li li,或者更精确的.menu > li > ul > li。要是孙子li有特定类,就用那个类来选。

  • 检查代码执行时机
    如果你的jQuery代码在DOM还没加载完就跑了,自然找不到元素。一定要把代码放在DOM就绪的回调里:

    $(document).ready(function() {
      // 比如获取所有孙子菜单元素
      const grandchildItems = $('.menu li li');
      console.log(grandchildItems.length); // 看看控制台输出的数量,确认是否找到
    });
    

    或者更简洁的简写:

    $(function() {
      // 你的代码
    });
    
  • 动态元素用事件委托
    如果这个菜单区块是通过AJAX动态加载的(Drupal有些场景会这么做),直接给元素绑定事件会失效。这时候要用事件委托,把事件绑定到静态的父元素(甚至document)上:

    // 比如给孙子菜单的链接绑定点击事件
    $(document).on('click', '.menu li li a', function(event) {
      event.preventDefault();
      console.log('孙子菜单链接被点击了');
      // 这里写你的处理逻辑
    });
    

    这样不管元素是一开始就存在还是后来动态添加的,事件都能触发。

  • 排查DOM结构是否符合预期
    你给出的HTML被截断了,要确认菜单确实有孙子层级——比如顶级li里面有没有嵌套的ul.menu?Drupal默认的菜单如果有子菜单,会在li里面嵌套ul,结构大概是:

    要是结构不对,比如没有嵌套的ul,那自然找不到孙子元素。

你可以先按上面的步骤排查,尤其是先看控制台有没有报错,用console.log输出选择器获取的元素数量,这样能快速定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:29:02