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

纯JS实现hover元素加类、状态保持至hover另一同级元素的方法

首先你的原始代码存在多个语法和逻辑错误,以下是问题说明和正确实现:

错误点说明

  • 原生JavaScript不存在document.ready()方法,该方法是jQuery专属,原生要等待DOM加载完成需要监听DOMContentLoaded事件
  • 方法名拼写错误:正确方法名为getElementsByClassName,你少写了末尾的s,且该方法返回的是类数组集合,无法直接调用事件监听、classList等方法,需要遍历集合内的每一个元素再操作
  • classList的add/remove方法没有返回值,不支持链式调用
  • 事件绑定对象错误:你给默认隐藏的.hidden元素绑定鼠标事件,默认状态下该元素不可见,无法触发mouseenter事件,应该给可 hover 的父容器.container绑定事件

正确实现代码

document.addEventListener('DOMContentLoaded', function() {
    // 获取所有容器元素
    const containers = document.querySelectorAll('.container');
    
    containers.forEach(container => {
        container.addEventListener('mouseenter', function() {
            // 先清除已激活的显示状态
            const activeEl = document.querySelector('.show');
            if (activeEl) {
                activeEl.classList.remove('show');
                activeEl.classList.add('hidden');
            }
            // 激活当前容器内的隐藏元素
            const currentTarget = this.querySelector('.hidden');
            if (currentTarget) {
                currentTarget.classList.remove('hidden');
                currentTarget.classList.add('show');
            }
        });
    });
});

逻辑说明

你提供的CSS过渡规则本身可以正常生效,配合上述JS逻辑后,hover任意容器时只会激活当前容器内的隐藏元素,其余容器的元素自动恢复隐藏状态,鼠标离开所有容器后会按照你设置的9999秒延迟才会隐藏元素,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:54:05