URL锚点触发FAQ展开:Drupal中jQuery实现方案咨询
Drupal FAQ锚点访问自动展开对应答案的解决方法
直接用$(hash).show()无效的原因是你原来的点击交互不止修改display属性,还涉及过渡效果类和data-slide-toggle属性的设置,单纯调用show()只会改变display,不会同步其他状态。
推荐两种解决思路:
1. 复用原有点击逻辑(更稳妥)
直接触发对应问题元素的click事件,让原有交互代码自动处理所有样式和属性:
$(document).ready(function() { const hash = window.location.hash; // 确认hash对应存在的答案元素 if (hash && $(hash).length) { // 找到关联的问题元素(根据你的DOM结构调整选择器,比如答案的父容器内的问题按钮) const $question = $(hash).closest('.faq-item').find('.faq-question'); // 触发点击事件 $question.trigger('click'); } });
2. 手动同步所有状态(适合无法复用点击逻辑的场景)
如果必须手动设置,要完全对齐点击时的DOM状态,包括display、过渡类、data属性:
$(document).ready(function() { const hash = window.location.hash; if (hash && $(hash).length) { const $answer = $(hash); // 替换成你实际使用的过渡类名和data属性值 $answer.css('display', 'block') .addClass('faq-transition-active') // 假设过渡效果靠这个类实现 .attr('data-slide-toggle', 'open'); // 对齐点击后的属性值 // 同步问题元素的状态(比如高亮、箭头切换) const $question = $answer.prev('.faq-question'); $question.addClass('active'); } });
注意:两种方案都需要确保页面DOM完全加载后执行代码,另外要根据你的实际DOM结构调整选择器,比如.faq-item、.faq-question这些类名要和页面里的一致。
内容的提问来源于stack exchange,提问作者Tan
相关产品推荐
相关产品推荐

