下面的问题让我很困惑。我知道它们是相关的,但是...
- 是否支持 HTML 5 命名空间(包括 SVG/其他 XML 方言的标签)?
- 如果不是,那么这个 -
I have read this old link, but I am totally confused... because Mozilla says "to dynamically modify inline SVG, scripting needs to be done this way" - so finally, how can I dynamically modify inline SVG (if HTML 5 is not namespace aware)?
- 或者页面需要作为 (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>
以上代码是在 HTML 5 中呈现 rect
(使用 SVG)的正确方法。现在,要使用 JavaScript 修改 SVG,Mozilla 建议使用 this应用程序接口(interface)。我的问题是,如果 HTML 5 不支持 namespace ,这样做有什么意义?对于这种情况,浏览器会自动切换到 (X)HTML 5 吗?
我读了this对 SO 发表评论,我发现它最接近我正在寻找的答案 -
I guess the HTML 5 SVG situation is basically "SVG without a namespace gets the namespace added during parsing (but after that it's just like (X)HTML before)".
最佳答案
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/xhtml
或 http://www.w3.org/2000/svg
命名空间取决于它们在 HTML 代码中出现的上下文。
HTML 解析器知道 HTML elements
, SVG elements
, 和 MathML elements
而没有其他人。没有使用来自其他 namespace 的元素的选项,既不是隐式也不是显式。即 xmlns
属性无效。
关于javascript - HTML 5、内联 SVG 和 SVG DOM 的命名空间感知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23319537/