2011-08-27 102 views
1
canvas = $('#canvasID'); 

canvas = document.getElementById('canvasID'); 

有什麼區別?爲什麼我不能使用canvas.offset()當我通過第二種方式獲取畫布對象?這兩種獲取畫布對象的方式有什麼區別

+0

第二行返回一個帆布元件,所述第一線將返回它包含相同帆布元素作爲其''0''屬性jQuery對象。請注意'document.getElementById('x')=== $('#x')[0]' –

+0

@ user915717編輯您的問題。在HTML4中同樣有效,假設你有一個'id =「canvasID」'的對象 –

回答

6

$('#canvasID')使用jQuery來獲取元素。

document.getElementById('canvasID');使用瀏覽器原生實現通過它的ID獲取元素。

$("#canvasID")的實現在瀏覽器中有所不同,但我懷疑它實際上在所有現代瀏覽器中都使用了document.getElementByID()

第二種方法不能使用offset的原因是因爲它是jQuery對象上的方法(從$('#canvasID');返回)。

0

.offset()方法是一個jQuery方法。 $()函數返回一個匹配選擇器的jQuery包裝對象數組。所以你可以在它們上調用jQuery方法。 document.getElementById('canvasID');返回沒有定義這種方法的本地DOM元素。

0

offset()是一個jQuery方法,可以應用於由$(或jQuery)函數返回的jQuery對象。要獲取原始畫布對象,請使用$('#canvasID')[0]訪問此對象的元素。

document.getElementById返回原始對象。要從原始HTML對象中獲取jQuery對象,請使用它調用$

總結:

var jquery_canvas = $('#canvas'); 
var raw_canvas = jquery_canvas[0]; 
var jquery_canvas_again = $(raw_canvas); 

var context = raw_canvas.getContext('2d'); 
// NOT: jquery_canvas.getContext(), as getContext is only defined on raw object 

var offset = raw_canvas.offset(); 
// NOT: raw_canvas.offset(), as offset is only defined on a jQuery object 
0

與第一種方式,你要表示元素的jQuery的對象 - 這jQuery的對象有一個offset() - 方法。
getElementById()你會得到一個「普通」javascrip對象,但不知道這個方法。

0

$('#canvasID')使用jQuery的

document.getElementByID('canvasID')使用瀏覽器的原生實現,基本原料的JavaScript。

您不能使用.offset()方法,因爲您試圖在非jQuery對象上使用它。

相關問題