如何实现点击显示菜单孙子元素?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
相关产品推荐
相关产品推荐

