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

调用修改目标元素innerText的函数后Hover效果失效问题求助

问题分析与解决方案

嘿,我一眼就瞅出问题所在啦!你遇到的hover失效情况,根源出在CSS选择器的写法和JavaScript修改DOM的方式不匹配上。

问题原因拆解

先看你的CSS代码:

.option :hover { box-shadow: 0 0 0 3px burlywood; cursor: pointer; }

注意.option和:hover之间的空格——这是一个后代选择器,意思是“给.option内部的所有子元素添加hover效果”。页面刚加载时,每个.option里都有一个<div>,所以hover能正常触发在这个内层div上。

但当你点击Start按钮调用loadQuestions()时,用了opt1.innerText = 'A: 55'这类代码,这会把.option内部的原有<div>整个替换成纯文本,内层div直接消失了!没有了可匹配的子元素,.option :hover自然就失效了。

两种解决方法任你选

方法一:修改CSS选择器(最简单)

把CSS里的空格去掉,让hover直接作用在.option容器本身:

.option { border: 2px solid blue; }
.option:hover { box-shadow: 0 0 0 3px burlywood; cursor: pointer; }

这样不管.option内部是什么内容,hover效果都会直接应用在容器上,再也不会因为内部元素变化而失效。

方法二:修改JavaScript代码(保留原有DOM结构)

如果想保留原来的CSS选择器逻辑,那就在JS里只更新内层<div>的内容,而不是替换整个.option的内容:

const question = document.getElementById('question');
const opt1 = document.getElementById('opt1');
const opt2 = document.getElementById('opt2');
const opt3 = document.getElementById('opt3');
const opt4 = document.getElementById('opt4');

function loadQuestions() {
  question.innerText = 'How old are you?';
  // 找到每个.option里的div,只修改它的文本
  opt1.querySelector('div').innerText = 'A: 55';
  opt2.querySelector('div').innerText = 'B: 52';
  opt3.querySelector('div').innerText = 'C: 82';
  opt4.querySelector('div').innerText = 'D: 12';
}

这样内层的<div>会被保留,.option :hover的选择器依然能匹配到元素,hover效果就正常工作了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:52:42