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

为何动态生成的脚本未追加至.skip-page div反而添加到body?

问题原因及解决方案

以下是可能导致脚本被追加到<body>而非目标位置的原因,以及对应的解决办法:

  • 目标元素未加载时脚本已执行
    这是最常见的核心原因:你的自执行函数在DOM完全渲染前就运行了,此时.skip-page元素还没被解析到DOM树中,jQuery选择器$('.skip-page')返回空集合。当对空集合调用append()时,jQuery会默认将元素追加到<body>末尾,这就出现了你看到的结果。

    解决办法:

    • 将这段脚本放在HTML文档的末尾(</body>标签之前),确保目标元素已经被渲染完成。
    • 或者用DOM就绪事件包裹代码,确保在DOM加载完成后再执行:
      $(document).ready(function() {
          let relScript = document.createElement('script');
          relScript.src="https://mountain.com/assets/js/sso.js";
          relScript.type  = "text/javascript";
          relScript.async  = true;
          relScript.defer  = true;
          $('.skip-page').after(relScript); // 注意这里用after满足"放在div之后"的需求
      });
      
  • 方法使用错误(混淆append与after)
    你的需求是将脚本放在.skip-page之后(作为兄弟节点),但append()的作用是把元素追加到目标元素的内部末尾。虽然这个错误本身不会直接导致脚本跑到<body>,但如果目标元素不存在,就会触发上面的问题。要实现"放在div之后"的需求,应该使用after()方法,它会将元素插入到目标元素的外部后方。

  • jQuery未正确加载
    如果页面没有引入jQuery,或者jQuery的引入位置在这段脚本之后,$会处于未定义状态,浏览器会抛出错误。部分特殊环境下可能会触发 fallback 逻辑,导致脚本被追加到<body>。检查页面是否正确引入jQuery,且引入顺序在这段脚本之前。

  • 选择器匹配错误
    确认.skip-page类名没有拼写错误,或者该元素不是通过其他脚本动态生成的。如果是动态生成的元素,需要等待该元素创建完成后再执行你的脚本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 06:55:18