在此代碼:爲畫布聲明變量時爲什麼要加上[0]?
var canvas = $("#myCanvas")[0];
var ctx = canvas.getContext("2d");
爲什麼我們必須添加[0]
識別印刷品嗎?這對我來說有點令人困惑,因爲[n]
通常會在有多個具有相同名稱的元素時添加,並且我們需要解決特定的元素。但是一個id只能指向一個獨特的元素。
在此代碼:爲畫布聲明變量時爲什麼要加上[0]?
var canvas = $("#myCanvas")[0];
var ctx = canvas.getContext("2d");
爲什麼我們必須添加[0]
識別印刷品嗎?這對我來說有點令人困惑,因爲[n]
通常會在有多個具有相同名稱的元素時添加,並且我們需要解決特定的元素。但是一個id只能指向一個獨特的元素。
此語法用於從jQuery對象中檢索底層畫布DOME元素,以便可以使用getContext()
方法(jQuery對象不具有的方法)。
$('#myCanvas') // = canvas DOMElement wrapped in a jQuery object
$('#myCanvas')[0] // = canvas DOMElement
document.getElementById('myCanvas') // = canvas DOMElement
參見:
jQuery的總是返回一個數組類的對象,即使你使用一個(唯一的)ID作爲選擇。
在你的情況下,[0]
是返回第一個(也是唯一的)實際元素。
@Oriol - 是的,我知道。這是一個打字之前打字太快的情況。感謝您指出我的錯誤 – Jamiec
jQuery選擇器可以返回多個對象,所以它們總是返回看起來像一個數組的東西。恕我直言,如果您需要更復雜的選擇器,最好使用'canvas = document.getElementById('myCanvas')' – Alnitak
...或'document.querySelector(「#myCanvas」)'。 – Oriol
因爲要使用像getContext()這樣的JavaScript方法,您需要返回實際的dom元素而不是jQuery數組。例如,做$(「body」)。innerHTML會給你undefined,但是$(「body」)[0] .innerHTML將返回body的內容。 – gothical