javascript - w3c dom 和 javascript

标签 javascript dom

我看到了 W3C 文档对象模型,并且很高兴不同的编程语言必须相应地实现其接口(interface)。与其他语言一样,JavaScript 也维护 DOM。

所以我很想知道以下问题:

  1. 哪些版本的 javascript 实现了 dom level 1, 2,3 等 向前。
  2. 它们都是用 JavaScript 实现的吗?
  3. 它们是由 javascript 实现还是由 ECMAScript 实现以及 然后是 JavaScript?
  4. W3C DOM 中描述的 IDL 定义是什么:它们是吗? javascript 开发人员需要理解或者是符号 HTML实现?

最佳答案

  1. 迂腐的答案是“没有”。
    JS 迭代到 DOM 规范没有正式的映射。
    一般来说,JS 版本控制几乎已被放弃(除了重大修改),尽管可以被视为您何时开始考虑功能检查的路标。
    这是因为...

  2. 不完全是,不。
    也就是说,是的,您将用于与 HTML DOM 交互的 API 都是用 JavaScript 实现的...
    然而,没有浏览器能够稳定、功能完整地实现这两者
    JS HTML DOM[1-4]。
    由于这两个规范都非常庞大且不断变化,不同的 vendor 在不同的时间优先考虑不同的功能,从而导致不兼容的补丁。
    为了进一步实现这个实际答案,JS 规范没有提及 DOM 或 BOM(“浏览器...”)API。
    这就是#1 必须是“否”的原因,因为不同 JS 实现上的不同 DOM/BOM 组合导致根本无法说“所有兼容 JS1.7 的浏览器都兼容 DOM3”。
    事实是,没有浏览器完全符合这两个规范,而且这两个规范都不是最新的。至于技术实现(API背后的代码),没有规则,只要行为定义良好即可。一些浏览器遵循 C/C++ 来实现核心 JS/DOM/BOM 功能,而较旧的 IE 浏览器在浏览器和 JS DOM 访问之间有一个 ActiveX 层(无论出于何种原因,触摸元素都会变得非常昂贵)。

  3. 问题就在这里。
    大多数人会认为它们是不同的东西。
    大多数人会认为“JS 是您在浏览器中使用的东西,用于编写脚本。”。
    确实,ECMAScript 和 JavaScript 是同一件事,而且“JavaScript”是 Sun(现在是 Oracle)的商标……为什么我们没有人被起诉是一个谜。
    JS/ECMAS 对 DOM 或 BOM 一无所知,并且由 vendor 在其浏览器中包含 DOM 访问(基于每个功能,而不是每个版本)。还应该注意的是,虽然 VendorA 可能实现规范中的某个功能,而 VendorB 可能会省略它,但 VendorC 可能有一个非标准的实现,并且还实现了类似但完全超出规范的功能。

  4. 不必担心 DOM 实现细节。
    作为 JS 开发人员,您不需要知道或关心 HTML 节点的 Java 实现是什么样子。
    即使有了 WebIDL,并远离旧世界以 Java 为中心的观点,就 JS 作为语言的日常使用而言,DOM 节点界面就像 toast 一样干巴巴、没有黄油、面朝下的沙丘,除非你真的喜欢沙丘。
    即便如此,更多的是那些制造浏览器的人,而不是那些制造在浏览器中运行的东西的人。

这些并不是全部答案。虽然我试图保持主观性,但我确信其中有一点客观主义,因为它们并不是完全明确的。至少我已经尽力做到实事求是。

从工程 Angular 来看,在客户端 JS 中谨慎使用 DOM 的方式和时间非常重要——这既可以使代码可移植,也可以允许客户端堆栈中的每种语言访问 HTML问题,无需在 JS 中翻筋斗,以适应,因为您使用 JS 中的 DOM 构建构建了整个网站。

从务实的 Angular 来看,不要尝试将功能与版本相匹配,而是使用像 http://caniuse.com 这样的网站将功能与浏览器版本相匹配。它的生产力更高。

玩得开心。

关于javascript - w3c dom 和 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22951930/

相关文章:

javascript - 我用 javascript 生成了 html 代码(很多 div)。现在我想用 GetElementById 找到生成的 div

javascript - 从 HTML 外部打开模态

javascript - 具有多个 xtypes 的 ExtJS 5 网格小部件列

javascript - 在 NodeJS 中提取和解析巨大的不完整 JSON

javascript - Google Maps API - 未定义热图( map 显示但无法更改)

java - dom4j.Node 迭代元素映射

javascript - 获取jstree中子节点的直接父节点

Javascript:浏览器 View 和 DOM 之间的原子性/交互

javascript - 图像数组。未捕获的类型错误 : Cannot set property 'src' of null

javascript - 如何在没有 innerHTML = ""的情况下清除 div 的内容;