Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $(这)不同于';元素';$.each循环上下文中的参数_Javascript_Jquery - Fatal编程技术网

Javascript $(这)不同于';元素';$.each循环上下文中的参数

Javascript $(这)不同于';元素';$.each循环上下文中的参数,javascript,jquery,Javascript,Jquery,可能重复: 我的问题是: 1) 为什么注释代码的行为与上面的不一样(即为什么它会抛出错误) $(函数(){ $('#ex4')。附加(''); $('#ex4')。附加(''); $('#ex4')。附加(''); $('#ex4 canvas')。每个(函数(索引,元素){ $(此).attr(“宽度”,“125”) $(此).attr(“高度”,“50”) var context=element.getContext(“2d”); //var context=$(this).getCont

可能重复:

我的问题是:

1) 为什么注释代码的行为与上面的不一样(即为什么它会抛出错误)

$(函数(){
$('#ex4')。附加('');
$('#ex4')。附加('');
$('#ex4')。附加('');
$('#ex4 canvas')。每个(函数(索引,元素){
$(此).attr(“宽度”,“125”)
$(此).attr(“高度”,“50”)
var context=element.getContext(“2d”);
//var context=$(this).getContext(“2d”);错误
context.strokeStyle=“红色”;
context.fillStyle=“#999900”;
context.font=“30px Arial”;
填充文本(“HTML5”,0,35);
});
})
2) 如何解决下面类似代码中的错误(可能与上面相同)

$.each(data[0], function (i) {
  $('#content').append('<canvas id=' + i + ' class=can ></canvas>');
  $('#content #' + i).attr("width", "125")
  $('#content #' + i).attr("height", "50")

  //var context = $('#content #'+i).getContext("2d"); error

})
$。每个(数据[0],函数(i){
$(“#内容”)。追加(“”);
$(“#内容#”+i).attr(“宽度”,“125”)
$(“#内容#”+i).attr(“高度”,“50”)
//var context=$('#content#'+i).getContext(“2d”);错误
})

而不是
//var context=$(this.getContext(“2d”)

用法:
var context=$(this)[0].getContext(“2d”)

而不是:
//var context=$('\content#'+i).getContext(“2d”);错误

用法:
var context=$('#content#'+i)[0];error

是canvas元素的方法,而不是jQuery方法

任何看起来像
$(…)
的对象都是jQuery对象,您只能从该对象访问jQuery方法和属性。要访问jQuery对象的底层元素,可以像数组一样取消引用它。e、 g.jQuery对象中的第一个元素是
$(…)[0]
,依此类推

每个
循环的上下文中,标记为
元素
的对象实际上是HTML元素(在本例中是canvas元素),这就是该行工作的原因
元素
在这里是同义词,因此您可以使用其中任何一个<但是,code>$(this)
$(element)
都是jQuery对象

类似地,在第二个示例中,
$('#content#'+i)
引用jQuery对象,
$('#content#'+i)[0]
提供底层DOM元素

$('#content #'+i)[0].getContext("2d"); //yields appropriate result

作为一般性说明
错误消息
Object xyz没有方法“abc”
,或者类似的东西,当您试图在jq对象上调用
getMethod
时,无疑会收到这些信息,通常建议您将一个方法链接到某个您误解了其结构的对象上,这通常是一个好迹象,您应该去查阅您正在使用的对象的API。将对象记录到控制台通常也能很好地了解其结构,在这种情况下,这样做会告诉您实际上并不是在画布上操作。

看看这个问题:使用
$('#content#'+i).get(0).getContext(“2d”)
什么是
错误行
?@Sirko为什么不投票以重复的形式关闭?@Iftah那么用这个代替包装就可以修复它了?为什么用
$(this)[0]
代替
这个
?谢谢你的回答!这是一个很好的解决方案
$('#content #'+i)[0].getContext("2d"); //yields appropriate result