【发布时间】:2021-12-16 10:19:17
【问题描述】:
考虑这个简单的页面:
<html>
<body>
<svg width="250" height="250">
<g>
<path id="foo" d="M20,230 Q40,205 50,230 T90,230" stroke="red" stroke-width="3" fill="none" onclick="setBlue()" />
</g>
</svg>
<script>
function setBlue() {
document.getElementById("foo").setAttribute("stroke", "blue");
}
</script>
</body>
</html>
它将显示一条红色波浪线。如果单击该线,它将变为蓝色。这表明 JavaScript 功能正在这个 SVG 对象中运行,并且路径元素 foo 已添加到 DOM 本身。
现在改为加载浏览器可以缓存的静态 SVG:
<img width="250" height="250" src="images/somesvg.svg" />
嵌入的 JavaScript 没有命中。通过 JavaScript 或 jQuery 向 DOM 请求 foo 不会返回任何内容。
这是否意味着在 SVG 中命名元素或添加 JavaScript 功能的唯一方法是在 HTML 本身中呈现 SVG?如果我可以将 ID 添加到 SVG 文件中的路径然后访问它们,我可以显着缩短页面。
【问题讨论】:
-
“这是否意味着在 SVG 中命名元素或添加 JavaScript 功能的唯一方法是在 HTML 本身中渲染 SVG?” - 是的,使用 img 标签渲染的 svg 将像光栅图像一样被静态处理。如果您不能将它们内联在文件中,最好的方法 imo 是使用 javascript 来获取并将它们作为内联 svgs 注入,但请参阅此处的讨论以获取替代方案和
stackoverflow.com/questions/4476526/… ,特别是关于
-
是this 你在找什么?
-
您可以通过
<use xlink:href="external.svg#id1"></use>从外部svg添加任何元素。这可能是 DOM 中 svg 中的整个 svg。