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

如何实现单个Modal显示多个同class div的独有信息?

问题解答

不需要为每个div创建单独的Modal,一个Modal就能实现需求。你当前的问题是代码里固定取了数组的第一个元素([0]),导致所有触发事件的div都显示第一个的内容。

问题原因

你的代码中titleInfo[0].title和dataContent[0].dataset.content硬编码了索引0,不管哪个div触发鼠标事件,都会读取数组的第一个元素数据,所以所有Modal内容完全一致。

解决方法

有两种常见的修正方式:

方式1:直接从当前触发事件的div元素提取数据

如果你的每个div本身通过data-*属性(比如data-title、data-content)存储了独有信息,或者内部包含标题/段落子元素,可以直接通过当前元素获取:

boxes.forEach((box) => {
  box.addEventListener("mouseenter", function () {
    modalContainer.classList.remove("display-none");
    // 从当前box的data属性读取标题和内容
    modalTitle.innerText = this.dataset.title;
    modalParagraph.innerText = this.dataset.content;
    // 若标题是box内的子元素(比如class为box-title的元素),可改为:
    // modalTitle.innerText = this.querySelector('.box-title').textContent;
  });

  box.addEventListener("mouseleave", function () {
    modalContainer.classList.add("display-none");
  });
});

方式2:利用forEach的索引匹配数组数据

如果titleInfo和dataContent是与boxes数组一一对应的数据集,可以通过forEach的索引参数匹配对应项:

boxes.forEach((box, index) => {
  box.addEventListener("mouseenter", function () {
    modalContainer.classList.remove("display-none");
    // 使用当前box的索引读取对应数组数据
    modalTitle.innerText = titleInfo[index].title;
    modalParagraph.innerText = dataContent[index].dataset.content;
  });

  box.addEventListener("mouseleave", function () {
    modalContainer.classList.add("display-none");
  });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:33:33