Javascript 为什么会出现错误:uncaughttypeerror:cannotreadproperty';左';未定义的

Javascript 为什么会出现错误:uncaughttypeerror:cannotreadproperty';左';未定义的,javascript,jquery,Javascript,Jquery,HTML: 为什么会出现此错误?“使用jQuery的.css()函数,因为这就是使用jQuery的基本原因: canvas.style.left = $("#opening_0").style.left - img.width + "px"; canvas.style.top = $("#opening_0").style.top - img.height + "px"; 使用jQuery的.css()函数,因为这就是使用jQuery的基本原因: canvas.style.left = $

HTML:

为什么会出现此错误?“

使用jQuery的.css()函数,因为这就是使用jQuery的基本原因:

canvas.style.left = $("#opening_0").style.left - img.width + "px"; 
canvas.style.top = $("#opening_0").style.top - img.height + "px"; 
使用jQuery的.css()函数,因为这就是使用jQuery的基本原因:

canvas.style.left = $("#opening_0").style.left - img.width + "px"; 
canvas.style.top = $("#opening_0").style.top - img.height + "px"; 

错误是因为
$(“#opening_0”)
返回一个包装匹配DOM节点的jQuery对象。要访问底层DOM节点,可以将其视为数组:
$(“#opening_0”)[0]
将起作用


但是,这种方法不会很好地工作,因为
style.left
将返回一个可能包含px或百分比值的字符串。您可以使用
$(“#opening_0”).offset()。left
将始终返回一个数值。

错误是因为
$(“#opening_0”)
返回一个jQuery对象,该对象包装匹配的DOM节点。要访问底层DOM节点,可以将其视为数组:
$(“#opening_0”)[0]
将起作用,例如


但是,这种方法不会很好地工作,因为
style.left
将返回一个可能包含px或百分比值的字符串。您可以使用
$(“#opening_0”).offset()。left
将始终返回一个数值。

style属性

如果您想访问它,请使用以下方式之一:

canvas.style.left = parseInt($("#opening_0").css('left')) - img.width + "px"; 
…或“展开”jQuery对象,如下所示:

document.getElementById("opening_0").style.left;

我建议使用第一种方法。只要记住使用
parseInt()

解析值,jQuery对象没有
样式
属性

如果您想访问它,请使用以下方式之一:

canvas.style.left = parseInt($("#opening_0").css('left')) - img.width + "px"; 
…或“展开”jQuery对象,如下所示:

document.getElementById("opening_0").style.left;

我建议使用第一种方法。只要记住使用
parseInt()

解析值,为什么在不使用.css()函数的情况下使用jquery?我对使用jquery很陌生,所以我的代码是使用和不使用的混合体。为什么在不使用.css()函数的情况下使用jquery函数?我不熟悉使用jquery,所以我的代码是使用和不使用的混合体。我猜否决票是因为你基本上说了与Nevett的答案完全相同的事情,仅仅三分钟后。@RaphaelSchweikert:这与他的答案不同。不同的方式?两个答案都解释:1.出现混淆是因为OP想要使用DjQuery对象上的OM属性以及如何解析它(通过访问DOM对象)2.CSS值在用作数字之前必须进行解析。我看不到您添加的任何实质性内容。此外,使用
parseInt
可能会产生错误的结果,因为单位可能不是预期的
px
,而
offset
(Nevett的解决方案)始终适用于像素。@RaphaelSchweikert:答案指出了相同的问题(这是非常常见的,我甚至认为是必要的),但通过使用普通Javascript提供了不同的解决方案,然后建议了另一种解决方案,是的,也已发布(你没有想到我们可以同时开始写答案,但我在3分钟后就写完了?)。绝对没有理由否决这样的答案。首先:我不是否决你答案的那个人,所以你不必生我的气。幸运的是,stackoverflow很不错,它向你展示了在你写自己的答案时有新的答案。很多次我不得不放弃(或重写)我知道,这不是一种好的感觉,但试着想想读者(可能不是OP),他们必须经历所有这些重复(或微妙的不同)为了找到一个真正包含问题解决方案的答案。在评论中修改
getElementById
更简洁。我猜否决票是因为你在仅仅三分钟后,基本上说了与Nevett的答案完全相同的话。@RaphaelSchweikert:这与他的答案不同。如何不同?Bo答案解释:1.之所以会出现混淆,是因为OP希望在jQuery对象上使用DOM属性,以及如何解决它(通过访问DOM对象)2.CSS值在用作数字之前必须进行解析。我看不到您添加的任何实质性内容。此外,使用
parseInt
可能会产生错误的结果,因为单位可能不是预期的
px
,而
offset
(Nevett的解决方案)始终适用于像素。@RaphaelSchweikert:答案指出了相同的问题(这是非常常见的,我甚至认为是必要的),但通过使用普通Javascript提供了不同的解决方案,然后建议了另一种解决方案,是的,也已发布(你没有想到我们可以同时开始写答案,但我在3分钟后就写完了?)。绝对没有理由否决这样的答案。首先:我不是否决你答案的那个人,所以你不必生我的气。幸运的是,stackoverflow很不错,它向你展示了在你写自己的答案时有新的答案。很多次我不得不放弃(或重写)我知道,这不是一种好的感觉,但试着想想读者(可能不是OP),他们必须经历所有这些重复(或微妙的不同)答案,以便找到实际包含问题解决方案的答案。在注释中修改
getElementById
方式更简洁。