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