HTML 5,内联SVG和SVG DOM的命名空间感知

时间:2014-04-27 04:51:14

标签: javascript html html5 svg xhtml

以下问题让我感到困惑。我知道他们有关系,但是......

  1. 是否支持HTML 5名称空间(包含SVG /其他XML方言的标签)?
  2. 如果不是,那么这个怎么样 -
      

    我已阅读此old链接,但我完全感到困惑...因为Mozilla说要动态修改内联SVG,需要编写脚本this方式" - 最后,如何动态修改内联SVG(如果HTML 5不支持名称空间)?

  3. 或者页面需要作为(X)HTML 5?
  4. 提供

    <小时/> 详情 -

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8">
        <title>hello-SVG</title>
    </head>
    <body>
        <svg width="200" height="200">
            <rect x="0" y="0" width="100" height="100" fill="blue"></rect>
        </svg>
    </body>
    </html>
    

    以上代码是在HTML 5中呈现rect(使用SVG)的正确方法。现在,要使用JavaScript修改SVG,Mozilla建议使用this API。我的问题是,如果HTML 5不支持名称空间,那么这样做的重点是什么?对于这种情况,浏览器会自动切换到(X)HTML 5吗?

    我看了this对SO的评论,我发现它最接近我正在寻找的答案 -

      

    我猜HTML 5 SVG情况基本上是#34;没有命名空间的SVG在解析过程中会添加名称空间(但之后它就像(X)HTML之前的那样)&#34;。

1 个答案:

答案 0 :(得分:26)

HTML5定义了HTML,XHTML和DOM。

DOM可识别名称空间。使用DOM方法时,必须考虑每个元素所在的命名空间,但默认为HTML(http://www.w3.org/1999/xhtml)命名空间。

HTML和XHTML是通过解析转换为DOM的序列化。

XHTML是名称空间感知的,XHTML文档根据XML规则应用名称空间,因此所有名称空间必须明确地分配给每个元素。使用XML解析器将XHTML转换为DOM。

HTML也可识别名称空间,但名称空间是隐式分配的。使用HTML解析器将HTML转换为DOM,知道哪些元素位于哪个命名空间中。也就是说,它知道<div>位于http://www.w3.org/1999/xhtml命名空间中,而<svg>位于http://www.w3.org/2000/svg命名空间中。像<script>这样的元素可以放在http://www.w3.org/1999/xhtmlhttp://www.w3.org/2000/svg命名空间中,具体取决于它们在HTML代码中出现的上下文。

HTML解析器知道HTML elementsSVG elementsMathML elements以及没有其他。没有选项可以使用其他名称空间中的元素,既不隐式也不明确。也就是说,xmlns属性没有效果。