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

jQuery .append()创建两个img元素而非一个的解决方法

问题根因

原代码重复生成2个img的核心原因是选择器写的是$('video source[src=""]'),示例代码里单个video标签下包含2个src为空的source标签,each会匹配到2个元素触发2次循环,每次循环都执行一次图片插入逻辑,自然会生成重复的img元素。同时原逻辑全部写死固定id,只能适配单个视频模块,无法覆盖页面所有video标签。

修复方案

调整遍历和判断逻辑,核心改动点:

  • 遍历维度从空source标签改为所有video标签,每个视频只做一次有效性判断
  • 新增有效源校验规则:同时检查video自身src、所有子source标签的src,只要存在非空的有效地址就不展示占位图
  • 移除固定id绑定,通过相对DOM查找匹配当前视频对应的容器,插入前先清除容器内已存在的占位图,既避免重复插入,也支持页面任意数量的video标签适配
  • 占位图改用类选择器控制样式,避免多实例下id重复的合规性问题
完整修复代码

JS逻辑

$(document).ready(function() {
  // 遍历页面下所有video标签
  $('video').each(function() {
    const $currentVideo = $(this);
    // 校验当前视频是否存在有效播放源
    const hasValidSource = !!$currentVideo.attr('src')?.trim() || 
      $currentVideo.find('source').toArray().some(source => !!$(source).attr('src')?.trim());

    if (!hasValidSource) {
      // 查找当前视频对应的外层容器
      const $coverBox = $currentVideo.closest('.video-cover');
      // 提前移除已存在的占位图,避免重复插入
      $coverBox.find('.video-placeholder').remove();
      // 插入占位图
      $coverBox.append('<img class="video-placeholder" src="https://uploads-ssl.webflow.com/6012ac684e954c060b8219fb/609bc7bbab390bac021906a5_ELEMENTE-04.svg" alt="视频占位图">');
    }
  });
});

CSS样式

/* 视频容器加相对定位,方便占位图居中覆盖 */
.video-cover {
  position: relative;
}
/* 占位图样式 */
.video-placeholder {
  width: 200px;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 1;
}

HTML结构

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="video-wrapper">
  <div class="video-cover">
    <video width="100%" muted playsinline controls data-object-fit="contain">
      <source src="" type="video/mp4">
      <source src="" type="video/mp4">
      您的浏览器不支持HTML5 video标签
    </video>  
  </div>
</div>
<!-- 可任意新增多个video模块,逻辑会自动适配,不会出现重复插入占位图的问题 -->
效果验证
  • 单个video下存在多个空src的source标签时,只会插入1张占位图
  • 页面新增任意数量的video标签,只要无有效播放源就会自动在对应位置插入占位图,不会出现跨容器错乱
  • 只要video存在任意一个非空的有效视频源,就不会插入占位图,不影响正常视频播放

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:01:06