我有一个SVG文件,我不想将其粘贴到HTML文件中,因为它会变得混乱。 因此,在咨询了w3schools之后,“embed”标签似乎是将外部SVG文件包含在HTML中最安全的方法。
<embed src="path_to_svg" type="image/svg+xml" id='svgsource' />
但是,我需要通过主html文件中的javascript通过DOM访问svg元素。不幸的是
document.getElementById('my_svg_id')
,也不
document.getElementById('svgsource').contentDocument
适用于任何浏览器。使用“object”标签也不起作用。
答案 0 :(得分:9)
完成关于转弯!
原来可以,请看这个链接:http://xn--dahlstrm-t4a.net/svg/html/get-embedded-svg-document-script.html
(另外,在Erik Dahlström's个其他答案中进行投票,给我一些积分,让我劫持他的答案!)
答案 1 :(得分:9)
使用.getSVGDocument()
。这似乎适用于<embed>
,<object>
和<iframe>
:
document.getElementById('svgsource').getSVGDocument()
对于<object>
或<iframe>
,您还可以使用.contentDocument
:
document.getElementById('svgsource').contentDocument
对于IE7或IE8,我相信你运气不好。
答案 2 :(得分:0)
您是否尝试使用&lt; object&gt;元素而不是? (数据属性而不是src)
答案 3 :(得分:0)
我相信在IE9中你可以使用<iframe>
元素加载SVG,在这种情况下你可以访问contentDocument
属性,但是对于以前版本的IE,你可能会运气不好。 (其他浏览器应该允许您将contentDocument
与<embed>
和<object>
一起使用。)
答案 4 :(得分:0)
简短回答:您可以尝试内联引用的SVG文件内容。对于<object>
和<iframe>
元素,请使用:
e.parentElement.replaceChild(e.contentDocument.documentElement.cloneNode(true), e);
...其中e
是引用元素。如果您绝对需要<embed>
元素,请将上述代码中的.contentDocument
更改为.getSVGDocument()
(括号是必需的)。但请注意,.getSVGDocument()
is now deprecated因此不推荐,但无论如何它也已recommended to use <object>
or <iframe>
instead of <embed>
。
如需更完整的答案,请参阅my other SO answer on the subject。