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

如何在JavaScript中为所有class为prod-grid的div上方插入新div?

解决方法:为所有prod-grid元素前插入新div

你的代码问题出在两个地方:一是只取了第一个prod-grid元素,二是通过全局判断virtualProdSet-container的数量来控制插入,导致只会执行一次插入操作。以下是修改后的代码,能实现给每个prod-grid元素前都插入目标div:

if (window.location.href.indexOf('/order/prod') !== -1) {
  var insertVirtualProductsPackInterval = setInterval(() => {
    const prodGrids = document.getElementsByClassName('prod-grid');
    // 遍历所有prod-grid元素
    for (let i = 0; i < prodGrids.length; i++) {
      const prodGrid = prodGrids[i];
      // 检查当前prod-grid前面是否已经插入过目标容器
      const hasInserted = prodGrid.previousElementSibling?.classList.contains('virtualProdSet-container');
      if (!hasInserted) {
        const virtualProdSetHTML = '<div class="virtualProdSet-container resp-outerBox" style="display: none;">' +
          '<div class="new-banner"></div>'+
          '</div>';
        prodGrid.insertAdjacentHTML('beforebegin', virtualProdSetHTML);
      }
    }
    // 所有元素都处理完后清除定时器,避免重复执行
    if (document.querySelectorAll('.prod-grid').length === document.querySelectorAll('.virtualProdSet-container').length) {
      clearInterval(insertVirtualProductsPackInterval);
    }
  }, 100);
}

关键改动说明:

  • 遍历所有prod-grid元素,不再只处理第一个
  • 新增重复插入检查:通过previousElementSibling判断当前元素前是否已有目标容器,避免重复添加
  • 移除了原代码中重复的id(多个元素共用同一个id违反HTML规范)
  • 新增定时器自动清除逻辑:当所有prod-grid都完成插入后,停止定时器减少不必要的性能消耗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:01:46