2016-01-13 108 views
1

在此代碼:爲畫布聲明變量時爲什麼要加上[0]?

var canvas = $("#myCanvas")[0]; 
var ctx = canvas.getContext("2d"); 

爲什麼我們必須添加[0]識別印刷品嗎?這對我來說有點令人困惑,因爲[n]通常會在有多個具有相同名稱的元素時添加,並且我們需要解決特定的元素。但是一個id只能指向一個獨特的元素。

+3

jQuery選擇器可以返回多個對象,所以它們總是返回看起來像一個數組的東西。恕我直言,如果您需要更復雜的選擇器,最好使用'canvas = document.getElementById('myCanvas')' – Alnitak

+1

...或'document.querySelector(「#myCanvas」)'。 – Oriol

+0

因爲要使用像getContext()這樣的JavaScript方法,您需要返回實際的dom元素而不是jQuery數組。例如,做$(「body」)。innerHTML會給你undefined,但是$(「body」)[0] .innerHTML將返回body的內容。 – gothical

回答

3

此語法用於從jQuery對象中檢索底層畫布DOME元素,以便可以使用getContext()方法(jQuery對象不具有的方法)。

$('#myCanvas')      // = canvas DOMElement wrapped in a jQuery object 
$('#myCanvas')[0]     // = canvas DOMElement 
document.getElementById('myCanvas') // = canvas DOMElement 

參見:

What is a jQuery object

canvas API reference

0

jQuery的總是返回一個數組類的對象,即使你使用一個(唯一的)ID作爲選擇。

在你的情況下,[0]是返回第一個(也是唯一的)實際元素。

+0

@Oriol - 是的,我知道。這是一個打字之前打字太快的情況。感謝您指出我的錯誤 – Jamiec

相關問題