Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 以编程方式创建SVG锚元素?_Javascript_Html_Svg - Fatal编程技术网

Javascript 以编程方式创建SVG锚元素?

Javascript 以编程方式创建SVG锚元素?,javascript,html,svg,Javascript,Html,Svg,如何通过JavaScript创建SVG锚?请参阅相关章节和中的示例。如何将此示例转换为JavaScript(基本上,如何动态生成容器元素a),以便在单击椭圆时,它导航离开 <?xml version="1.0"?> <svg width="5cm" height="3cm" viewBox="0 0 5 3" version="1.2" baseProfile="tiny" xmlns="http://www.w3.org/2000/svg" xmlns:xlink=

如何通过JavaScript创建SVG锚?请参阅相关章节和中的示例。如何将此示例转换为JavaScript(基本上,如何动态生成容器元素
a
),以便在单击椭圆时,它导航离开

<?xml version="1.0"?>
<svg width="5cm" height="3cm" viewBox="0 0 5 3" version="1.2" baseProfile="tiny"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">

  <title>Example 17_01</title>
  <desc>A simple link on an ellipse.</desc>
  <rect x=".01" y=".01" width="4.98" height="2.98" 
        fill="none" stroke="blue"  stroke-width=".03"/>
  <a xlink:href="http://www.w3.org/">
    <ellipse cx="2.5" cy="1.5" rx="2" ry="1"
             fill="red" />
  </a>
</svg>

例17_01
椭圆上的简单链接。

这只是基本的DOM:

var xlinkNS=”http://www.w3.org/1999/xlink“,svgNS=”http://www.w3.org/2000/svg";
var a=document.createElements(svgNS,“a”);
a、 setAttributeNS(xlinkNS,“href”http://www.w3.org/");
var椭圆=document.createElements(svgNS,“椭圆”);
椭圆。毛属性(空,“cx”,“2.5”);
椭圆.刚毛(空,“cy”,“1.5”);
椭圆。setAttributeNS(null,“rx”,“2”);
椭圆。刚毛(空,“ry”,“1”);
椭圆。setAttributeNS(空,“填充”,“红色”);
a、 附加子(椭圆);
document.documentElement.appendChild(a);

使用下面的“我的”功能,就这么简单:

//查找第一个SVG元素
var svg=document.getElementsByTagName('svg')[0];
var a=createOn(svg,'a',{'xlink:href':'http://www.w3.org/'});
createOn(a,'eliple',{cx:2.5,cy:1.5,rx:1,ry:1,fill:red'});
函数createOn(根、名称、属性、文本){
var doc=root.ownerDocument,
svg=root.ownerSVGElement | | root;//如果root _是
var svgNS=svg.getAttribute('xmlns');
var el=doc.createElements(svgNS,名称);
for(属性中的var attr){
如果(!attrs.hasOwnProperty(attr))继续;
var parts=attr.split(“:”);
如果(第[1]部分)el.setAttributeNS(
getAttribute('xmlns:'+parts[0]),parts[1],attrs[attr]
);
else el.setAttributeNS(null,attr,attrs[attr]);
}
if(text)el.appendChild(document.createTextNode(text));
返回root.appendChild(el);
}
如果您已经拥有椭圆并希望将其包裹,则创建“a”元素并:

//以您喜欢的方式获取椭圆的引用
var eliple=document.getElementsByTagName('eliple')[0];
//将锚节点放在椭圆的正前方
椭圆.parentNode.insertBefore(a,椭圆);
//将椭圆移动为锚点的子对象
a、 附加子(椭圆);