【问题标题】:How can I copy ALL the attributes and styling from one svg to another svg using js please?请问如何使用js将所有属性和样式从一个svg复制到另一个svg?
【发布时间】:2014-09-20 17:04:01
【问题描述】:

以下代码将复制一个属性:'fill-rule' 从 svg(external svg) 到 snap paper(internal svg)。请问如何将所有属性和样式从一个svg复制到另一个svg? 任何想法将不胜感激。

s1.attr("fill-rule", svg.node.getAttribute("fill-rule"));

编辑:如果我使用罗伯茨代码,为什么不将 attrs 从 svg 复制到 s1?:

s1.attr(attrs.item(i).svg);

直播: http://jsbin.com/geyog/5/edit

【问题讨论】:

  • 因为 s1.attr 需要两个参数来设置一个值,所以您将它用作 getter。
  • @罗伯特。你的意思是像:s1.attr("*", attrs.item(i).svg);
  • 不,我没有。你需要研究 attr 的论点。
  • @罗伯特。在这里我找到了这个信息: 参数名称 (DOMString) required 要创建或更改的属性的名称。 value (DOMString) required 属性的字符串值。但在这种情况下,我不知道要创建的 attr 的名称。那我该怎么办?
  • 属性的名称是我在回答中提供的 nodeName 属性。如果您进行一些研究,您可能还会找到您需要的其他属性。

标签: javascript svg raphael snap.svg


【解决方案1】:

DOM 中有一个 attributes 属性

如果你有

<svg id="svg" preserveAspectRatio="none" width="100%"/>

你可以这样做......

var svg = document.getElementById("svg");
for (var i=0, attrs=svg.attributes, l=attrs.length; i<l; i++){
    s1.attr(attrs.item(i).nodeName, attrs.item(i).value);
}

在你的情况下大概是

var svg = svg.node;

【讨论】:

  • 非常感谢@Robert。我怎样才能将这些属性复制到 s1 而不是提醒他们?:jsbin.com/geyog/4/edit
  • @ Robert。我做了一些研究,发现我需要一对节点名和一个值,所以我需要添加:alert(attrs.item(i).value; 来获取这些节点名称的值,但仍然无法找到将它们附加到快照文件 s1 的方法。您能帮忙吗?!
  • 谢谢罗伯特。昨晚我在问你之后正在玩它,然后在找到 snap attr 和 js 属性之间的区别后找出你的更新答案。感谢您让我自己动手并学习!
猜你喜欢
  • 2019-01-02
  • 2018-11-04
  • 2011-02-12
  • 2021-08-03
  • 2011-05-28
  • 1970-01-01
  • 2022-01-15
  • 2015-10-03
相关资源
最近更新 更多