2012-07-17 93 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相比,這是一個更加有限的目標,並且通常已經取得成功。

相關問題