javascript - HTML 5、内联 SVG 和 SVG DOM 的命名空间感知

标签 javascript html svg xhtml

下面的问题让我很困惑。我知道它们是相关的,但是...

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

    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)?

  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>

以上代码是在 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/xhtmlhttp://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/

相关文章:

javascript - 为什么 javascript 对我从服务器获取的数据进行重新排序

javascript - 如何通过 POST 将双 slider 最小值和最大值发送到 PHP

javascript - 如何在 JavaScript 中将数组添加到对象?

javascript - Haxe -> JS switch 语句分支错误(Haxe -> 相同代码的 Flash 工作正常),为什么?

html - 如何将网站锚定到 USB 闪存驱动器?

svg - 为什么 d3.select() 返回数组数组?

javascript - 无法使用 webpack 和 redux-react 获取模拟

html - 使用 rgba() 仅在背景图像上设置不透明度

html - 如何创建 css 渐变和阴影

css - 由于阴影,SVG 在 Safari 上消失了