1

我已经完成了“Javascript 权威指南”的一半,现在意识到像 jquery 这样的东西的主要原因是因为不同浏览器上的 Javascript/DOM 界面存在极大的不一致。几乎每个页面都提到了一些文档属性,但条件是(例如)它可以在除 IE 8 之前的所有浏览器(或 Firefox 或其他任何浏览器)上运行。

那么,是否有一个 JS 库可以完全按照它在 Chrome 中的功能实现 Javascript DOM,但它可以用于所有浏览器。如果没有,那么学习 DOM 似乎毫无意义——看起来还不如坚持使用 Jquery。

4

1 回答 1

3

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

您可以争辩说所有代码都应该按照 DOM 应该工作的方式进行编码,并使用这个修复 DOM 的神奇 shim 层,但这是一个您无法取胜的实际论点。有太多的代码期望 IE6 DOM 能够像在 IE6 中那样以破碎的方式工作。例如,jQuery 本身期望 IE6 DOM 被破坏。如果你想使用这个神奇的 DOM fixer shim,那么它将与任何 jQuery 代码完全不兼容。

因此,图书馆发现使用并行访问事物的方式来隐藏 DOM 会更好、更容易,并且补丁和浏览器修复程序都在这个并行层中。然后,任何期望 DOM 以浏览器使其工作的方式工作的现有代码都不会受到影响,但是为使用该库而编写的任何代码都会按照该库的期望工作。两个目标都可以满足。是的,它是一个“新”的学习 API,但实际上并没有什么不同。如果您了解 DOM API,那么 jQuery 的大部分内容都是直接并行的,只是以常见的 jQuery 形式表示。

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

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

于 2012-07-17T21:10:10.947 回答