适用于所有浏览器的Chrome JS / Dom?

时间:2012-07-17 19:35:46

标签: javascript dom cross-browser

我正在谈论“Javascript the Definitive guide”,现在意识到jquery之类的主要原因是因为不同浏览器上Javascript / DOM界面的极端不一致。几乎每个页面都提到了一些文档属性,条件是(例如)它适用于除了版本8之前的IE(或Firefox或其他)之外的每个浏览器。

那么,是否存在一个JS库,它只是像在Chrome中那样实现Javascript DOM,但它可以用于所有浏览器。如果没有,那么学习DOM似乎毫无意义 - 似乎只是坚持使用Jquery。

1 个答案:

答案 0 :(得分:3)

不存在只使所有DOM行为相同的库。部分原因是DOM不容易以可靠的方式进行修补,不会与其他库可能正在做的事情发生冲突。并且,部分原因是某些事物可以以其原生形式进行修改。例如,如果可以直接访问的对象属性(没有函数调用)有时在某些浏览器中具有错误的值,则没有简单的方法来修补它以修复它。并且,部分原因是许多项目都有来自许多来源的代码块,其中一些直接使用DOM,其中一些使用库。如果库更改了DOM行为,那么直接使用DOM并期望它在本机浏览器中工作的代码可能会中断。

你可以争辩说,所有代码应该只编写DOM应该工作的方式,并使用这个修复DOM的神奇填充层,但这是一个你无法获胜的实际论点。有太多的代码需要IE6 DOM在IE6中运行它破碎的方式。例如,jQuery本身期望IE6 DOM被破坏。如果你想使用这个神奇的DOM修复程序shim,那么它将与任何jQuery代码完全不兼容。

相反,库已经发现,使用并行访问方式来修改DOM更好更容易,补丁和浏览器修复程序也在这个并行层中。然后,任何希望DOM以浏览器使其工作方式工作的现有代码都不会受到影响,但是使用该库编写的任何代码都可以实现库所期望的代码。两个目标都可以满足。是的,这是一个值得学习的“新”API,但它确实并非完全不同。如果您了解DOM API,那么jQuery的大部分都是直接并行,只是以常见的jQuery形式表示。

例如,在jQuery中,您可以使用.attr("propName")访问DOM对象上的任何属性,其中propName是DOM属性名称。如果您已经学习了DOM属性名称,那么您现在知道如何在jQuery中访问所有这些属性。同样,您可以使用jQuery(CSS3selector)在页面中选择任意一组对象。所以,如果您了解CSS3选择器,那么您现在知道如何在jQuery中选择任何对象集。是的,jQuery中有许多增强的功能,它们添加了DOM中不存在的新功能,但您可以根据需要单独学习这些功能。无论如何,它们不在常规DOM中。

最后,有一些shim库会添加缺失的功能。例如,有一些填充库可以将ES5方法添加到标准javascript对象,例如Array.indexOf()。这些填充库可以按照您所说的方式部分工作。如果该方法不存在,则添加它以使其工作就像标准实现一样。他们不会尝试修复损坏的实现,但是他们确实添加了缺少的东西,因为它是较旧的浏览器版本,因此开发人员可以只编写代码到ES5而无需担心浏览器兼容性。与在所有浏览器中修复整个DOM相比,这是一个非常有限的目标,并且通常是成功的。

相关问题