JavaScript生成的SVG不呈现内容

JavaScript生成的SVG不呈现内容,javascript,html,svg,Javascript,Html,Svg,我正在自学JavaScript和SVG为网页创建一些交互式图形,但遇到了一个问题,即没有在编程生成的SVG中绘制路径。以下是显示问题的测试代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> </head> <body> <svg width="1em" height="1em" viewBox="0 0 350 350" preserveAspec

我正在自学JavaScript和SVG为网页创建一些交互式图形,但遇到了一个问题,即没有在编程生成的SVG中绘制路径。以下是显示问题的测试代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<svg width="1em" height="1em" viewBox="0 0 350 350"
     preserveAspectRatio="xMidYMid meet"
     style="border: 1px solid #cc0000;">

    <path d="M 50 50 L300 50 L300 300 L50 300 Z"/>
</svg>
</body>
<script>
"use strict";
var s = document.createElementNS("http://www.w3.org/2000/svg","svg")
s.setAttribute("width","1em")
s.setAttribute("height","1em")
s.setAttribute("viewBox", "0 0 350 350")
s.setAttribute("preserveAspectRatio","xMidYMid meet")
s.setAttribute("style","border: 1px solid #cc0000;")
var g = document.createElement("path")
g.setAttribute("d",'M 50 50 L300 50 L300 300 L50 300 Z')
s.appendChild(g)
document.body.appendChild(s)
</script>
</html>

“严格使用”;
var s=document.createElements(“http://www.w3.org/2000/svg“,“svg”)
s、 setAttribute(“宽度”、“1em”)
s、 setAttribute(“高度”、“1em”)
s、 setAttribute(“viewBox”、“0 0 350”)
s、 setAttribute(“保留AspectRatio”、“xMidYMid满足”)
s、 setAttribute(“样式”,“边框:1px实心#cc0000;”)
var g=document.createElement(“路径”)
g、 setAttribute(“d”,“M 50 50 L300 50 L300 L50 300 Z”)
s、 儿童(g)
document.body.appendChild
这将并排显示两个SVG,每个SVG都有一个红色边框框。但是,第一个是从HTML生成的,它在SVG中绘制了一个黑色矩形。第二个——由JavaScript代码生成——不会绘制矩形

我不明白为什么。在呈现页面的DOM中检查这两个SVG表明它们完全相同。然而,我尝试过的每个浏览器都只绘制第一个矩形


关于这个错误有什么建议吗?

您使用CreateElements作为svg元素,您需要使用相同的函数来创建路径,createElement不会这样做,因为它在HTML命名空间中创建元素,而不是在svg命名空间中

var g = document.createElementNS("http://www.w3.org/2000/svg", "path")

您将CreateElements用于svg元素,您需要使用相同的函数来创建路径,createElement不会这样做,因为它在HTML命名空间中创建元素,而不是在svg命名空间中创建元素

var g = document.createElementNS("http://www.w3.org/2000/svg", "path")

创建具有正确名称空间的
svg
元素后,
您可以使用HTML符号添加内容


让svg=document.createElements(“http://www.w3.org/2000/svg“,“svg”);
setAttribute(“viewBox”、“0350”);
让html=`+
``;
svg.innerHTML=html;
document.body.append(svg);
svg{
高度:150像素;
}

创建具有正确名称空间的
svg
元素后,
您可以使用HTML符号添加内容


让svg=document.createElements(“http://www.w3.org/2000/svg“,“svg”);
setAttribute(“viewBox”、“0350”);
让html=`+
``;
svg.innerHTML=html;
document.body.append(svg);
svg{
高度:150像素;
}

我对SVG一无所知,所以这只是一个猜测。可能SVG抽屉在页面加载之后但在javascript运行之前运行。生成的路径被隐藏,请改用
createElements(..)
。或者,尝试snapsvg.io以避免使用这种样板代码。我对SVG一无所知,所以这只是一个猜测。可能SVG抽屉在页面加载之后但在javascript运行之前运行。生成的路径被隐藏,请改用
createElements(..)
。或者,尝试使用snapsvg.io来避免这种样板编码,非常感谢。就是这样,非常感谢。没错,就是这样。