【问题标题】:document.createElement() creates unclosed tag?document.createElement() 创建未封闭的标签?
【发布时间】:2010-06-04 19:20:35
【问题描述】:

在 Firefox 中会发生这种情况,但在 Google Chrome 中不会。

我在 svg-web 画布中创建了一个 SVG“图像”标签,如下所示:

im = document.createElementNS(svgns, 'image');
im.setAttributeNS(xlinkns, 'href', g.href);
canvas.appendChild(im);

如果我查看 firebug 或 chrome 的调试器,svg 会像这样显示自关闭:

<image xlink:href="..." />

但如果我随后打印 svg 元素的 innerHTML 的父级,它会返回:

<svg><image xlink:href="..."></svg>

请注意,图像标签现在未关闭,这会导致错误。我发现了一个错误,还是我做错了什么?而且,可能更难的是,JavaScript 中有没有办法检查和修复标签?

【问题讨论】:

    标签: javascript firefox dom svg


    【解决方案1】:

    HTML 不要求空标签有结尾。即使文档是 XHTML,我也不确定它是否会从 innerHTML 属性返回有效的 XML。

    编辑:Mozilla Developer Center documentation for innerHTML 说您不应该依赖从 innerHTML 中获得的内容,并建议使用一些库作为专门用于 XML 的替代品。

    【讨论】:

    • 我知道。尽管如此,它还是以第一种方式显示在 HTML 查看器中,默认实现不应该是“正确”的实现吗?如果这是有意为之,这是否意味着 javascript DOM 方法不适用于 XHTML?
    • 工具显示它的方式并不暗示数据将如何从innerHTML中出来。 Firebug 是一个完全独立于 Firefox 的项目。你真正想要完成的是什么?你想确认这是否是一个错误?你想对innerHTML 中的数据做点什么吗?并不是 innerHTML 生成一个未闭合的标签,而是 HTML 不仅不需要 /> 它还不允许它,所以 Firefox 从它的 innerHTML 属性提供了有效的 HTML。
    • 您的编辑将我带到了 innerDom 包,我想这就是我想要的。谢谢
    猜你喜欢
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 2011-06-16
    • 2013-02-17
    • 2013-02-09
    • 1970-01-01
    相关资源
    最近更新 更多