Javascript 以编程方式创建SVG锚元素?
如何通过JavaScript创建SVG锚?请参阅相关章节和中的示例。如何将此示例转换为JavaScript(基本上,如何动态生成容器元素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=
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、 附加子(椭圆);