我已经使用ajax
动态创建了svg$.ajax({
url: 'file.svg',
dataType: 'text',
success: function(svg) {
var svg = $(svg).appendTo('body');
var shape = svg.find('g#shape');
// how to get shape as text.
}
});
我如何获得svg Tree,例如一个路径很少的组作为文本与jQuery中的html()
相同?
答案 0 :(得分:2)
您可以使用XMLSerializer来序列化节点。像这样......
var XMLS = new XMLSerializer();
var string = XMLS.serializeToString(node);
答案 1 :(得分:2)
根据您的浏览器,它可以使用两个序列化程序之一:
function xmltostring(domElem) { // Input the NODE of the DOM element
if (window.XMLSerializer) { // FF, Chrome, IE10 has an internal serializer
var XMLS = new XMLSerializer();
var xmlString = XMLS.serializeToString(domElem);
} else if (window.ActiveXObject){ // IE9 uses ActiveX
var xmlString = domElem.xml;
}
return xmlString;
}
注意:也适用于Safari。 IE8及以下版本不能原生处理SVG(需要插件),未经测试使用此功能。
答案 2 :(得分:0)
我找到了一种方法,我编写了这个返回SVG文本的插件,可能适用于嵌入到html DOM中的任何xml。
$.fn.xml = function() {
function serialize(node) {
var i;
var text = '<' + node.nodeName;
for(i = 0; i < node.attributes.length; ++i) {
text += ' ' + node.attributes[i].name + '="' +
node.attributes[i].value + '"';
}
text += '>';
if (node.childNodes.length) {
for (i = 0; i < node.childNodes.length; ++i) {
if (node.childNodes[i] instanceof Text) {
text += node.childNodes[i].wholeText
} else if (node.childNodes[i] instanceof SVGElement) {
text += serialize(node.childNodes[i]);
}
}
}
return text + '</' + node.nodeName + '>';;
}
return serialize(this[0]);
};