javascript - HTML/CSS 设置和 Javascript 设置的区别 - 主要是 Svg>Line 元素
问题描述
我有一个小问题,我似乎无法解决。我创建了一个表格,每个单元格中都有一个 svg>line 元素。不同之处在于,1 行是手动添加的,另一行是通过 Javascript 循环添加的。问题是 Javascript 中的那些没有显示,即使它们是相同的。
手动添加:
<table id="centertable" class="table">
<tr class="celldates" id="topDate"></tr>
<tr>
<td>
<svg>
<line x1="0" y1="50%" x2="100%" y2="50%"/>
</svg>
</td>
<td>
<svg>
<line x1="20%" y1="50%" x2="60%" y2="50%"/>
</svg>
</td>
</tr>
</table>
通过 Javascript 添加:
function setPersonTimes(person, weeks){
for(let i = 0; i < person; i++){
var a = document.createElement("tr");
var b = document.createElement("td");
b.classList.add("tableLeftContent");
b.innerHTML = "Person"
a.appendChild(b);
document.getElementById("lefttable").appendChild(a);
var c = document.createElement("tr");
c.classList.add("celldata");
for(let i2 = 0; i2 < weeks*7; i2++){
var d = document.createElement("td");
var e = document.createElement("svg");
var f = document.createElement("line");
f.setAttribute("x1", "0%")
f.setAttribute("y1", "50%")
f.setAttribute("x2", "80%")
f.setAttribute("y2","50%")
d.appendChild(e);
e.appendChild(f);
c.appendChild(d);
}
document.getElementById("centertable").appendChild(c);
}
}
现在所提到的问题是,使用 Javascript 添加的行是不可见的,即使添加了它们也是如此。它们明显显示如下:
绿色的是手动添加并使用 CSS 代码:
svg{
height: 10px;
width: 100%;
padding: 0px;
vertical-align: middle;
stroke-width: 5px;
border-radius: 5px;
stroke: green;
box-shadow: 0px 0px 2px rgb(0, 0, 0);
float:left;
}
任何想法为什么它在手动添加它时显示,而不是通过 Javascript?
解决方案
我看到您正在使用document.createElement("svg")
,但是 HTML 解析器没有提示此元素的名称空间。因此它将被分配给默认xhtml
命名空间"http://www.w3.org/1999/xhtml"
你需要使用
document.createElementNS("http://www.w3.org/2000/svg", "svg")
查看文档
推荐阅读
- python - PM2 未显示 python 应用程序版本
- mysql - 如何使用 CASE 语句在 MySQL 中进行计数
- ruby-on-rails - 如何从 sql 查询返回的 ruby 对象中检索列数据?
- python - python3 将字符串传递给子进程的标准输入时遇到问题
- xcode10 - Xcode 上 Playground 的默认目录
- cookies - 在不同的浏览器中劫持我自己的会话
- amazon-web-services - 如何在资源集成uri中赋予AWS api网关阶段变量
- nginx - Nginx Http 健康检查失败
- c# - asp.net core 2.1 和 Razor 页面中的模态表单验证
- python - 如何在python中更改多个文件(gjf)