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

GLE*_*LES 11 html javascript xhtml html5 svg

以下问题令我困惑.我知道他们有关系,但......

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

    我已阅读本旧的链接,但我完全糊涂了......因为Mozilla的说:"动态修改联SVG,脚本需要做这种方式" -所以最后,我怎么能动态地修改联SVG(如HTML 5是不是名称空间感知)?

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


细节 -

<!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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

Alo*_*hci 28

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,HTML解析器知道哪些元素位于哪个命名空间中.也就是说,它知道<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 elements,SVG elementsMathML elements没有其他人.没有选项可以使用其他命名空间中的元素,无论是隐式还是显式.也就是说,xmlns属性没有效果.

  • @Alohci SVG xlink 命名空间 http://www.w3.org/1999/xlink 怎么样?当我省略 xmlns:xlink 声明和 use href 属性上的 xlink 前缀时,Chrome 不会将 href 放入 http://www.w3.org/1999/xlink 命名空间中,并且不再正确呈现 SVG 元素。这是 Chrome 的错误吗? (2认同)
  • @Melab。没关系。命名空间名称只是一个无意义的字符串,在本例中恰好包含字符序列“xhtml”。 (2认同)