2

我已经嵌入了我使用 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 中的工作相同?

4

3 回答 3

2

您可以使用 XMLSerializer 序列化节点。像这样的东西...

var XMLS = new XMLSerializer(); 
var string = XMLS.serializeToString(node);
于 2013-06-13T09:44:17.547 回答
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(需要插件),未使用此功能进行测试。

于 2013-06-13T16:27:29.963 回答
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]);   
};
于 2013-06-13T08:06:51.073 回答