javascript - SVG 用 JS 附加到 DOM 但没有视觉呈现
问题描述
我正在尝试创建一个 SVG 形状并将其附加到我的 DOM 中的一个元素。
以下 JS 将 附加<svg>
到预期节点,但不会在页面上呈现紫色背景:
const svgBox = document.createElement("svg");
svgBox.setAttribute('height', 150);
svgBox.setAttribute('width', 800);
svgBox.setAttribute('style', 'background-color:purple;');
const div = document.getElementsByTagName('div')[0]; // this does exist
div.appendChild(svgBox);
这是一个JSFiddle,显示了可以正常工作的等效 HTML(如果我重新注释标签),但上面的 JS 不起作用。我已经从一个更复杂的用例中剥离了这一点,并向自己证明了我缺少一些关键的基本显示原则。
解决方案
SVG 是一个命名空间元素,因此您必须使用createElementNS
而不是createElement
- 以了解为什么查看此答案
这是一个工作示例:
const svgBox = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svgBox.setAttribute('height', 150);
svgBox.setAttribute('width', 800);
svgBox.setAttribute('style', 'background-color:purple;');
const div = document.getElementsByTagName('div')[0]; // this does exist
div.appendChild(svgBox);
<div>
</div>
推荐阅读
- ruby - 访问 Json 对象导轨
- regex - Hive regexp_extract 返回 NULL
- r - R - 访问列名称的 XML 模式属性名称
- versionone - 当网络出现故障时,如何在 Continuum 中重新运行活动?
- python - 替换列表中的每个元素
- user-interface - 气流显示超过 365 达格伦
- c++ - 如何在调用 pthread_cond_destroy 之前发出信号以中止/唤醒所有等待条件变量的线程?
- javascript - 我想知道是否可以遍历包含数组的对象数组来查找数组
- javascript - 添加两个值时 JavaScript 返回 NaN
- r - 重复测量,R 中的混合模型 ANCOVA