Javascript 为什么在为画布声明变量时添加[0]?
在此代码中:Javascript 为什么在为画布声明变量时添加[0]?,javascript,jquery,canvas,Javascript,Jquery,Canvas,在此代码中: var canvas = $("#myCanvas")[0]; var ctx = canvas.getContext("2d"); 为什么我们必须添加[0]来标识画布?这让我有点困惑,因为当有多个元素具有相同的名称,并且我们需要处理一个特定的元素时,通常会添加[n]。但是id只能引用一个唯一的元素。此语法用于从jQuery对象检索基础canvas DomeElement,以便可以使用getContext()方法(jQuery对象没有该方法) $('#myCanvas')
var canvas = $("#myCanvas")[0];
var ctx = canvas.getContext("2d");
为什么我们必须添加
[0]
来标识画布?这让我有点困惑,因为当有多个元素具有相同的名称,并且我们需要处理一个特定的元素时,通常会添加[n]
。但是id只能引用一个唯一的元素。此语法用于从jQuery对象检索基础canvas DomeElement,以便可以使用getContext()
方法(jQuery对象没有该方法)
$('#myCanvas') // = canvas DOMElement wrapped in a jQuery object
$('#myCanvas')[0] // = canvas DOMElement
document.getElementById('myCanvas') // = canvas DOMElement
另见:
jQuery始终返回类似数组的对象,即使使用(唯一)id作为选择器也是如此
在您的例子中,
[0]
将返回第一个(也是唯一一个)实际元素。jQuery选择器可以返回多个对象,因此它们总是返回类似于数组的内容。当然,最好只使用canvas=document.getElementById('myCanvas')
。。。或者document.querySelector(“#myCanvas”)
如果需要更复杂的选择器。因为要使用像getContext()这样的javascript方法,需要返回实际的dom元素,而不是jQuery数组。例如,执行$(“body”).innerHTML将为您提供未定义但$(“body”)[0]。innerHTML将返回body的内容。@Oriol-是的,我知道。这是一个在大脑活动之前打字太快的例子。谢谢你指出我的错误