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

为何hover样式作用于错误元素?API动态生成DOM的样式异常排查

问题解决:悬停.post时显示自身的.hidden元素

问题原因

你当前的CSS选择器.post:hover + .post .hidden使用了相邻兄弟选择器(+),它的作用是:当鼠标悬停在某个.post元素上时,选中它紧挨着的下一个同级.post元素里的.hidden,这就是为什么悬停当前.post时,下一个.post的.hidden会显示。

修复方案

核心CSS修正

只需要修改CSS选择器,去掉相邻兄弟选择器,直接选中hover状态下的.post内部的.hidden元素即可:

.post {
  border: 1px solid #000;
  margin-bottom: 15px;
}

.hidden {
  display: none;
}

/* 修正选择器:选中当前hover的.post下的.hidden */
.post:hover .hidden {
  display: block;
}

可选JS布局优化

你的JS代码里使用container.insertAdjacentHTML('afterend', ...)会把所有.post元素插入到container的外部(与container同级),如果你的意图是让.post作为container的子元素,建议将第二个参数改成'beforeend',使结构更符合常规的容器-子元素布局:

const fetchData = async() => {
    const res = await fetch('https://jsonplaceholder.typicode.com/posts')
    const data = await res.json()
    return data
  }
  (async() => {
    const container = document.querySelector('.container')
    const data = await fetchData()
    data.forEach(post => {
      container.insertAdjacentHTML(
        'beforeend', // 修改为该值,将post插入到container内部末尾
        `<div class="post">
            <p>${post.title}</p>
            <p class="hidden">hover</p>
          </div>`
      )
    })
  })()

修改后HTML结构会变为:

<div class="container">
  <div class="post">...</div>
  <div class="post">...</div>
  ...
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:27:23