我创建几个元件,其几乎是相同的路径,与坐标的长列表。有没有一种紧凑的方式来创建一个元素,并且制作一个稍微不同的副本?SVG:紧凑的方式来创建略有不同的元素?
的元素由 'createElementNS' 创建的。显而易见的(我认为)的答案是将第一个元素克隆到一个新元素中,并只设置第二个元素中已更改的属性。这适用于Chrome和IE9,但不适用于FF4或Opera。
另一个明显的解决方案是只与第一元件复制到一个变种,以及设置在var改变的属性。这在Chrome或FF中不起作用。
我可能通过创建一个createElementNS新元素,并从旧元素复制所有的属性,但我不知道在经历了所有属性的方式,周期,这将有助于。
这是几乎克隆工作的示例代码:
obj = svgDocument.createElementNS(svgns, "path");
obj.setAttributeNS(null, "id", "pbox1");
...lots more attributes set
svgDocument.documentElement.appendChild(obj);
// now try to clone and copy:
var obj2 = obj.cloneNode(true);
obj2.setAttributeNS(null, "id", "pbox2");
...change a few obj2 attributes
svgDocument.documentElement.appendChild(obj2);
任何想法?
谢谢 -
铝
请注意,如果您刚完成'var firstElement = templateElement','firstElement'和'templateElement'会引用同一个节点。我猜这就是为什么你的第二个解决方案不起作用 – AsherMaximum 2011-06-08 23:47:21
*&£*!我无法在“添加评论”框外回复您,因为它被视为答案,而且我的声誉低于100,所以我无法在6小时内回复。如何非常肛门。无论如何,我认为,我正在做的就是你的建议。它适用于Chrome,但不是FF。明天我会发布我的代码。这是2AM现在... :( – EML 2011-06-09 01:07:51
更新:这种方法适用于Chrome和IE9,但在Opera或FF4不起作用。 – EML 2011-06-09 09:05:28