就像我的标题所说,我正在尝试使用javascript以编程方式在HTML页面中创建SVG图像元素。由于某些原因,我的基本javascript代码无法正常工作,但是如果我使用raphaeljs库它可以正常工作。所以我的js显然有问题 - 我似乎无法弄清楚它是什么。
(注意:目标浏览器是FF4 +)
这是一个基本页面,其中包含我试图达到顶峰的html版本:
<html>
<head>
<script type="text/javascript" src="http://raphaeljs.com/raphael.js"></script>
</head>
<body>
<svg
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
id="test1"
height="200px"
width="200px">
<image
id="testimg1"
xlink:href="http://i.imgur.com/LQIsf.jpg"
width="100"
height="100"
x="0"
y="0"/>
</svg>
<hr />
<p id="testP1">
</p>
<hr />
<p id="testP2">
</p>
</body>
</html>
这是我的javascript:
var paper = Raphael(document.getElementById("testP1"), 200, 200);
paper.image("http://i.imgur.com/LQIsf.jpg", 0,0, 100, 100);
var svg = document.createElementNS('http://www.w3.org/2000/svg','svg');
svg.setAttributeNS('http://www.w3.org/2000/svg','xlink','http://www.w3.org/1999/xlink');
svg.setAttributeNS('http://www.w3.org/2000/svg','height','200');
svg.setAttributeNS('http://www.w3.org/2000/svg','width','200');
svg.setAttributeNS('http://www.w3.org/2000/svg','id','test2');
var svgimg = document.createElementNS('http://www.w3.org/2000/svg','image');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','height','100');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','width','100');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','id','testimg2');
svgimg.setAttributeNS('http://www.w3.org/1999/xlink','href','http://i.imgur.com/LQIsf.jpg');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','x','0');
svgimg.setAttributeNS('http://www.w3.org/2000/svg','y','0');
svg.appendChild(svgimg);
document.querySelector('#testP2').appendChild(svg);
答案 0 :(得分:38)
SVG本机属性(不包括xlink:href
)不共享SVG名称空间;您可以使用setAttribute
代替setAttributeNS
,也可以使用
svgimg.setAttributeNS(null,'x','0');
例如。
在这里工作:http://jsfiddle.net/UVFBj/8/
请注意,我改变了你的小提琴以正确使用XHTML,因此SVG在所有主流浏览器中都可以很好地运行。
答案 1 :(得分:6)
进一步参考。
我一直在使用bellow函数创建SVG元素,因为xlink:href,它在创建图像时失败了。
下面的代码更正了(动态创建任何svg元素)
function makeSVG(parent, tag, attrs) {
var el= document.createElementNS('http://www.w3.org/2000/svg', tag);
for (var k in attrs){
if(k=="xlink:href"){
el.setAttributeNS('http://www.w3.org/1999/xlink', 'href', attrs[k]);
}else{
el.setAttribute(k, attrs[k]);
}
}
}
样本用法:
makeSVG('#map-tiles', 'image', { class:'map-tile', 'xlink:href':'map/xxx.jpg', width:'512px', height: '512px' x:'0', y:'0'});
父级用于组织svg groups标签上的“图层”。