2

我有一个包含 4 个符号实例的 svg 文档。我想分别操作每个实例中的属性。例如更改某些标签的文本、更改形状的颜色、移动内部形状。

这似乎不可能,因为“SVGUseElement”的节点列表是空的。

在我看来,需要递归地将每个符号的内容解压缩到一个新文档中。

有什么想法吗?

谢谢!

4

2 回答 2

2

符号是视图,而不是原件的副本。更改原始视图,所有视图(符号)都会更改。听起来您想克隆节点并操作克隆而不是使用符号。

var copy = element.cloneNode(true);将创建元素及其子元素的副本。

然后,您可以通过使用复制变量引用它们来克隆中的事物。

于 2012-02-05T15:44:48.570 回答
0

这不是答案,但可能会有所帮助。

我还尝试访问符号分组的内部内容,以便例如在一个实例中更改元素的位置或颜色。在 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 是一个引用,所以克隆只是复制指针(浅拷贝)。

于 2014-05-01T00:37:40.597 回答