我正在尝试创建一个svg图像和文本对象,这两个对象都需要名称空间来设置xlink:href和xml:space属性。我已经尝试了以下代码而没有运气来创建这些对象,因此我可以将它们添加到屏幕上:
function createSVGNode(node) {
var svg = document.createElementNS('http://www.w3.org/1999/xlink', 'svg');
var ns2 = null;
if(node.nodeName == 'image') { ns2 = 'http://www.w3.org/1999/xlink'; }
var shape = document.createElementNS(ns2, node.nodeName);
svg.appendChild(shape);
var ns = null;
for(var attr = 0; attr < node.attributes.length; attr++) {
if(node.nodeName == 'image' && node.attributes[attr].nodeName == 'xlink:href') {
ns = 'http://www.w3.org/1999/xlink';
}
if(node.nodeName == 'text' && node.attributes[attr].nodeName == 'xml:space') {
ns = 'http://www.w3.org/XML/1998/namespace';
}
shape.setAttributeNS(ns, node.attributes[attr].nodeName, node.attributes[attr].nodeValue);
ns = null;
}
if(node.childNodes.length == 1) shape.appendChild(node.childNodes[0]);
return shape;
}
我确信我要比我需要的更难,但一切都在工作,直到我不得不处理图像和文本对象。
答案 0 :(得分:0)
SVG元素位于SVG名称空间
中var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
var shape = document.createElementNS('http://www.w3.org/2000/svg', node.nodeName);
svg.appendChild(shape);
var ns = null;
for(var attr = 0; attr < node.attributes.length; attr++) {
if(node.nodeName == 'image' && node.attributes[attr].nodeName == 'xlink:href') {
ns = 'http://www.w3.org/1999/xlink';
}
if(node.nodeName == 'text' && node.attributes[attr].nodeName == 'xml:space') {
ns = 'http://www.w3.org/XML/1998/namespace';
}
shape.setAttributeNS(ns, node.attributes[attr].nodeName, node.attributes[attr].nodeValue);
ns = null;
}
if(node.childNodes.length == 1) shape.appendChild(node.childNodes[0]);
return shape;