gpt4 book ai didi

javascript - 在 svg 文档中嵌入 svg 文件,通过 JavaScript 访问它的对象

转载 作者:行者123 更新时间:2023-12-03 00:05:08 24 4
gpt4 key购买 nike

我正在寻找一种方法,如何在占位符元素中从外部文件加载 svg 内容,并在加载时访问其对象以进行操作/修改。

类似这样的事情:

Host file:

<body>
<svg width="700" height="500">
<rect x="10" y="10" height="480" width="680" fill="red"/>
<g id="placeholder"></g>
</svg>
</body>

drawing.svg file:

<svg>
<circle id="obj1" cx="300" y="250" r="100" fill="blue"/>
</svg>

这是一些伪代码:

var placeholder = document.getElementById("placeholder");
loadSVGFile("drawing.svg", placeholder, function(svg) {
// Callback called when the file has loaded
var obj = svg.document.getElementById("obj1");
obj.setAttribute("fill", "black");
});

目前我正在内存中创建一个新的 <object>元素,加载 svg 文件,连接一个 onload 事件处理程序,该处理程序使用递归节点爬虫将文档内容复制到目标占位符元素。不漂亮,但它有效。希望有更好的方法。

最佳答案

像下面这样的东西应该可以工作。我还没有正确测试过它。但它是其他一些代码的精简版本,因此它至少应该非常接近。

function loadSVGFile(svgURL, placeholderElem, callbackFn) {
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
var svg = xhr.responseXML.getElementsByTagName('svg')[0];
placeholderElem.parentElement.replaceChild(svg, placeholderElem); // Replace the placeholder node
//targetNode.appendChild(svg); // Insert into the placeholder node
if (callbackFn) {
callbackFn(svg);
}
}
}
xhr.open('GET', svgURL, true);
xhr.send(null);
}

var placeholder = document.getElementById("placeholder");

loadSVGFile("drawing.svg", placeholder, function(svg) {
// Callback called when the file has loaded
var obj = svg.ownerDocument.getElementById("obj1");
obj.setAttribute("fill", "black");
});
<body>
<svg width="700" height="500">
<rect x="10" y="10" height="480" width="680" fill="red"/>
<g id="placeholder"></g>
</svg>
</body>

关于javascript - 在 svg 文档中嵌入 svg 文件,通过 JavaScript 访问它的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54993262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com