求助:用jQuery实现单餐厅营业时间独立显隐(WordPress自动生成Div)
只切换当前对应餐厅的营业时间
嘿,这个问题其实挺常见的——当元素是批量生成没法单独加ID时,利用DOM元素的相对位置就能搞定,完全不用给每个div单独加标识。
你现在的代码问题在于,每次点击都选中了页面上所有的.oh-wrapper,所以才会全部展开/收起。我们要调整选择逻辑,从点击的那个链接出发,只定位到它所属餐厅的营业时间容器。
给你修改后的代码:
jQuery(document).ready(function($) { $('.oh-current-open').on('click', function(e) { // 先阻止链接的默认跳转行为,避免页面刷新打乱操作 e.preventDefault(); // 核心逻辑:从当前点击的元素出发,锁定它所在餐厅的营业时间容器 // 这里假设每个餐厅的内容都包裹在类名为restaurant-item的父容器里 // 如果你的实际DOM结构不同,把'.restaurant-item'换成对应父元素的选择器就行 $(this).closest('.restaurant-item').find('.oh-wrapper').animate({ 'height': 'toggle' }); }); });
为啥这么写能解决问题?
$(this)指向当前被点击的「营业时间」链接,确保我们只围绕触发事件的元素操作。closest('.restaurant-item')会向上遍历DOM树,找到最近的包含这个链接的餐厅父容器——直接把操作范围限定在了当前餐厅内部。- 最后用
find('.oh-wrapper')在这个父容器里精准定位对应的营业时间容器,这样就只会展开/收起当前餐厅的内容,不会影响其他餐厅。
如果你的DOM结构里,.oh-wrapper是.oh-current-open的直接兄弟(比如俩元素在同一个父节点下),还能用上更简洁的写法:
$(this).siblings('.oh-wrapper').animate({ 'height': 'toggle' });
这样不管WordPress生成多少个餐厅div,每个链接都只会控制自己对应的营业时间啦~
内容的提问来源于stack exchange,提问作者Dev B
相关产品推荐
相关产品推荐

