2012-07-17 96 views
1

我刚刚通过“JavaScript权威指南”的一半,并认识到,像jQuery这样的主要原因是由于在不同的浏览器上的JavaScript/DOM接口极端不一致。在几乎每个页面上都提到了一些文档属性,但条件是(例如)它适用于除8版以前的IE浏览器(或Firefox或其他)以外的所有浏览器。适用于所有浏览器的Chrome JS/Dom?

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

+1

“如果没有,那么学习DOM似乎毫无意义” - 我不同意。 jQuery是一个使用DOM的工具。了解jQuery正在做什么以及它如何工作,需要了解DOM。 (就像知道通过ID选择器使用getElementById,并且它比其他选择器提供更好的性能)。当他或她明白自己在做什么时,开发人员可以更好地使用该工具。 – vcsjones 2012-07-17 19:42:02

+0

在概念上学习它是可以的,但是对于任何你想使用的东西,很可能它在实际使用的浏览器中有2-3%是无效的。 – Mark 2012-07-17 19:45:17

+0

“JS权威指南”实际上提供了JS源代码,可以在某些浏览器上实现很多缺失的功能,但并非全部使用,有时使用与实际标准不同的名称。所以,似乎所有这些都可以被打包成一个库。 – Mark 2012-07-17 19:48:56

回答

3

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

你可以争辩说,所有的代码应该只是代码到DOM应该工作的方式,并使用这个修复DOM的魔术垫层,但这是一个你不能赢的实际论证。有太多的代码需要IE6 DOM工作在IE6中工作的破碎的方式。例如,jQuery本身预计IE6 DOM会被破坏。如果你想使用这个神奇的DOM修正器垫片,那么它将完全不兼容任何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相比,这是一个更加有限的目标,并且通常已经取得成功。

相关问题