我这里使用的是Firefox 41。
我随机从维基共享资源中获取了一个完整的SVG文件代码。 (https://upload.wikimedia.org/wikipedia/commons/c/c6/%2212_World_fly.svg)。
然后我尝试了以下两种方法将其推送到div元素中,一种是使用div的innerHTML,另一种是尝试使用div的appendChild。
innerHTML至少有效,但使用webdeveloper查看生成的HTML代码时,有些行看起来有些可疑。
我随机从维基共享资源中获取了一个完整的SVG文件代码。 (https://upload.wikimedia.org/wikipedia/commons/c/c6/%2212_World_fly.svg)。
然后我尝试了以下两种方法将其推送到div元素中,一种是使用div的innerHTML,另一种是尝试使用div的appendChild。
innerHTML至少有效,但使用webdeveloper查看生成的HTML代码时,有些行看起来有些可疑。
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
还有显示出来。
使用appendChild根本不起作用。
我想使用类似于appendChild的东西,因为我知道使用innerHTML的解析器可能会有陷阱。
那么,如何将svg文件的完整字符串放入div中?
<html>
<head>
<script type="application/javascript">
function dgebi(id) {
return document.getElementById(id);
}
// short svg file as string
var svgtext = ... //... here I added the string from https://upload.wikimedia.org/wikipedia/commons/c/c6/%2212_World_fly.svg
var d;
function init() {
d = dgebi('id:testdiv');
//useInnerHTMLToCreateSVG();
useDOMParser();
}
function useInnerHTMLToCreateSVG() {
d.innerHTML = svgtext;
}
function useDOMParser() {
// see https://developer.mozilla.org/de/docs/Web/API/DOMParser#Parsing_an_SVG_or_HTML_document
var parser = new DOMParser();
var doc = parser.parseFromString(svgtext, "image/svg+xml");
// returns a SVGDocument, which also is a Document.
d.appendChild(doc);
}
function createElementSVG() {
var se = document.createElement('SVG');
d.appendChild(se);
console.log(se);
}
</script>
</head>
<body onload="init();">
<div style="width:400px;height:400px;border: 1px #ff0000 solid;" id="id:testdiv"></div>
</body>
</html>
adoptNode
,在强制执行 DOM 规范的浏览器上它将会失败。 - the8472