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

如何使用Javascript将SVG文件导入到同一页面的多个div中

问题根源
  • HTML 规范要求同一个页面内的id属性必须全局唯一,document.getElementById('output')只会匹配页面中第一个出现的对应 id 元素,因此其余 div 内的 img 标签不会被更新。
修复后的代码

HTML 部分

将重复的 id 替换为 class 即可:

<h1>Import file</h1>
<input type="file" id="file-selector">
<p id="status"></p>

<div>
  <img class="output">
</div>
<div>
  <img class="output">
</div>
<div>
  <img class="output">
</div>

JS 部分

修改为选中所有 class 为 output 的元素,读取文件后遍历赋值资源地址:

const status = document.getElementById('status');
// 获取所有需要加载SVG的img元素
const outputList = document.querySelectorAll('.output');
if (window.FileList && window.File && window.FileReader) {
  document.getElementById('file-selector').addEventListener('change', event => {
    // 先清空所有原有资源
    outputList.forEach(img => img.src = '');
    status.textContent = '';
    const file = event.target.files[0];
    if (!file.type) {
      status.textContent = 'Error: The File.type property does not appear to be supported on this browser.';
      return;
    }
    if (!file.type.match('image.*')) {
      status.textContent = 'Error: The selected file does not appear to be an image.'
      return;
    }
    const reader = new FileReader();
    reader.addEventListener('load', event => {
      // 给所有img元素赋值导入的SVG资源
      outputList.forEach(img => img.src = event.target.result);
    });
    reader.readAsDataURL(file);
  });
}

如果你后续需要操作导入的SVG内部DOM节点,不能使用img标签加载,需要改用object、embed标签或者直接将SVG代码内联到页面中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 21:24:04