【问题标题】:Access an element by class name from SVG using JavaScript使用 JavaScript 通过类名从 SVG 访问元素
【发布时间】:2021-07-17 14:55:16
【问题描述】:

我正在尝试通过类名 (ads) 从 SVG 访问 <g> 标记,并使用 JavaScript 将其呈现为 HTML 的 <object> 标记。

SVG 在这里渲染

<object id="container2" type="type=" image/svg+xml"></object>

使用Javascript

player2 = lottie.loadAnimation({
            container: document.getElementById('container2'),
            renderer: 'svg',
            loop: false,
            autoplay: true,
            path: 'assets/mindmap2.json'
        });

但问题是当这个函数被调用时,它会得到&lt;g&gt;,但在控制台中,它会显示 HTMLCollection 中的零元素。

 window.addEventListener("load", () => {
        console.log(document.getElementsByClassName('ads'));
    });

Microsoft Edge 控制台日志

Screenshot Image

【问题讨论】:

  • 请尝试document.getElementsByClassName('ads')[0]
  • 谢谢@enxaneta 我试过document.getElementsByClassName('ads')[0]document.getElementsByClassName('ads').item(0) 但问题仍然存在

标签: javascript svg dom domdocument htmlcollection


【解决方案1】:

加载窗口后立即调用您的 javascript 函数。当时svg图片还没有加载,它的内部元素是不存在的。根据this answer,您可以通过将脚本更改为:

const el = document.getElementById('container2');
el.addEventListener("load", () => {
    console.log(document.getElementsByClassName('ads'));
});

脚本应该在加载#container2 后调用。您可以在 html 代码之后添加脚本,也可以在加载页面后运行脚本。

【讨论】:

  • 感谢您的回复和时间。是的你是对的。我在想listenload 事件,但没有意识到这一点。我在here 上得到了类似的答案
  • 所以我把代码改成了这个 :point_down: player2.addEventListener("DOMLoaded", () =&gt; {console.log(document.getElementsByClassName('ads')); })
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 2019-05-31
  • 1970-01-01
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多