如何获得树的svg插入到DOM作为文本



我已经嵌入了使用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树,例如一个组与几个路径作为文本相同的html()在jQuery工作?

可以使用XMLSerializer序列化节点。像这样…

var XMLS = new XMLSerializer(); 
var string = XMLS.serializeToString(node);

根据浏览器的不同,它可以使用以下两个序列化器之一:

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(需要插件),未经此功能测试。

我找到了一种方法,我写了这个插件,返回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]);   
};

最新更新