我有一个包含 4 个符号实例的 svg 文档。我想分别操作每个实例中的属性。例如更改某些标签的文本、更改形状的颜色、移动内部形状。
这似乎不可能,因为“SVGUseElement”的节点列表是空的。
在我看来,需要递归地将每个符号的内容解压缩到一个新文档中。
有什么想法吗?
谢谢!
我有一个包含 4 个符号实例的 svg 文档。我想分别操作每个实例中的属性。例如更改某些标签的文本、更改形状的颜色、移动内部形状。
这似乎不可能,因为“SVGUseElement”的节点列表是空的。
在我看来,需要递归地将每个符号的内容解压缩到一个新文档中。
有什么想法吗?
谢谢!
符号是视图,而不是原件的副本。更改原始视图,所有视图(符号)都会更改。听起来您想克隆节点并操作克隆而不是使用符号。
var copy = element.cloneNode(true);
将创建元素及其子元素的副本。
然后,您可以通过使用复制变量引用它们来克隆中的事物。
这不是答案,但可能会有所帮助。
我还尝试访问符号分组的内部内容,以便例如在一个实例中更改元素的位置或颜色。在 Chrome 中工作,如果你定义了一个符号,那么它,你可以通过以下方式访问符号实例中元素的属性:
<defs>
<symbol id="what" ... >
</defs>
<use id="what1" xlink:href="#what" ... >
...
<script>
useobj = document.getElementById("what1");
innerobj = useobj.instanceRoot.firstChild.correspondingElement;
innerobj.x1.baseVal.value = 100;
但是,这会更改所有实例。我试过这个:
useobj = document.getElementById("what1").cloneNode(true)
但它仍然改变了所有实例。我推断 instanceRoot 是一个引用,所以克隆只是复制指针(浅拷贝)。