2014-01-17 66 views
0

幾天前我剛剛開始了我的第一個JavaScript教程。我已經到了他們解釋庫的使用的地步。考慮到兩個問題至今:JavaScript庫:jQuery與原型

  1. getElementById實施爲jQuery的$("#id")$("id")的原型。爲什麼不一致?

  2. 如果包含這兩個庫,那麼瀏覽器如何決定應該爲$("")返回哪個對象?

+2

你爲他們做了很多同樣的事情最有可能不會同時使用jQuery和原型一同來了解處理衝突。 – Jason

+0

@meagar如果我需要在我的代碼中使用兩者,該怎麼辦? –

+2

http://api.jquery.com/jquery.noconflict/ – j08691

回答

1

瀏覽器沒有「決定」,無論哪一個你包括第二個覆蓋第一個。

在兩個庫戰鬥在$的情況下,使用jQuery代替:

jQuery('#id') // same as $('#id') when $ == jQuery 

然後,您可以返回控制$jQuery.noConflict到原型。

至於不一致性,它們是由不同人在不同時間寫入的不同庫,無意使它們兼容。一致性從來不是一個考慮因素。

1

1.爲什麼不一致?

這兩個圖書館是在不同的時間,由不同的團隊實施的,並且做了非常不同的事情。爲什麼你會期望一致性?

2.如果包含這兩個庫,那麼瀏覽器如何決定$("")應返回哪個對象?

這取決於你如何包含它們。但是,jQuery具有避免這種衝突的功能,請參見jQuery.noConflict。我已經使用了原型已經有一段時間了,但它也可能具有類似的功能。

+1

Prototype在JavaScript本身中擴展了許多低級構造的原型(因此也是名稱)。 Ruby的哲學非常強調它的開放類,使語言能夠滿足你的需求,而不是像現在這樣使用它。因此,如果另一個庫期望通常的行爲,並依賴於它的破解(比如使用for ... each來遍歷數組),那麼您將得到不一致的結果。 jQuery可以使用noConflict()來處理Prototype對$符號的使用。並不是所有的jQuery插件都編寫得足夠好來處理剩下的問題。 – Walter

+1

原型:$('itemId') - >單個項目或false。 $$('。className標記任何選擇器') - >匹配項數組或空數組。 jQuery:$('#itemId')或$('whatever selector') - >包含匹配的對象。 – Walter