如何将svg树作为文本插入DOM

时间:2013-06-13 07:46:18

标签: text svg xmlnode

我已经使用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()相同?

3 个答案:

答案 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]);   
};