很奇怪的问题。我有一些密码:
var container = document.getElementById("graph"); //container element
console.log("Containers id is " + container.id); //graph
var element = document.createElement(this.componentType); //"canvas"
element.id = "canvasId";
console.log(element.outerHTML); //<canvas id="canvasId"></canvas>
//container.innerHTML = element.outerHTML;
document.getElementById("graph").appendChild(element);
这条代码看起来很管用。如果
this.componentType = "div"
或
this.componentType = "custom"
然后,它将应用结束标签.
<div id="canvasId"></div>
或
<custom id="canvasId"></custom>
但是如果
this.componentType = "canvas"
然后它只会产生开头的标签
<canvas>
没有尾声!尽管如此!console.log显示结束标记!所以我确实得到了一个结束标记,但是无论我是使用appendChild技术还是outerHtml技术,文档都只应用了canvas ()的开始标记。其他标签和自定义标签加载。
我检查了几个类似的问题,并认为答案将是这里的羞怯(在页的中间)。但reddit上的其他人证明了他的代码有效。
var element = document.createElement('canvas');
document.body.appendChild(element);
console.log(element.outerHTML); // "<canvas></canvas>"
我检查了Chrome和Safari,两者在开发工具中的结果是相同的。如果是画布,则只显示开始标记。其他人都表现得很得体。
编辑:结果
发布于 2016-11-12 00:20:33
叹一口气。所以,在编写了一个简单的html文件之后,我发现了一个丑陋的解决方案:
document.body.innerHTML = "<div><canvas>" + " <canvas></div>";
然而,它插入了一个额外的。至少它关闭并使用id'd画布:/
<div><canvas><canvas></canvas></div>
另外,如果我没有在中间添加+,我只得到一个
<div><canvas> </div>
。我在用pyCharm。我认为这是一个pyCharm本地服务器错误,所以我用textEdit编写了一个单独的html文件,但在没有运行服务器的情况下获得了相同的结果。下一站,要在Windows上试一试,看看是不是我的系统有问题。
编辑:确认在中工作。看来我的下一步是更新/刷新。
编辑:包括Teemus解释:
是的,就是这样。我想这是Chrome控制台的一个功能。DOM的HTML是正确创建的。画布没有内容,因此它不需要结束标记(在控制台中,HTML当然需要它)。如果要在新创建的画布元素中添加一些文本,也可以在Chrome工具中看到结束标记。- Teemu
我仍然觉得奇怪的是,它在Windows中正常工作,但是在OSX (Safari & Chrome)中,结果是一样的。所以我想,这个问题已经回答了。
https://stackoverflow.com/questions/40556861
复制相似问题