我很好奇为什么这不起作用。这是更假设的,但我确实在我正在做的网站上遇到了这个问题。我试图避免函数内部的jQuery函数。这个选择器是窗口,而不是每个框。
编辑*的 ** 我理解如何做$(“。box”)。each(function(){// code here});但是在功能里面是不是草率或不好的练习功能?
CSS
.box {
height: 50px;
width: 50px;
background: green;
margin-bottom: 5px;
}
HTML
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
的Javascript
function changeMe(obj) {
console.log(obj);
$(obj).css("background", "blue");
}
$.each($(".box"), changeMe(this));
答案 0 :(得分:4)
当您调用$.each
函数时,this
仍然引用窗口对象,如您所述。要让this
引用jQuery对象,可以在匿名函数中调用它,这将获得适当的范围。
$(".box").each(function(){
changeMe(this);
});
作为旁注,在Javascript中调用其他函数内部的函数绝对不是不好的做法,草率或任何负面的。事实上,它是Javascript编程的基石(其中一个最重要的概念,回调,依赖于其他函数内部的函数)。函数是Javascript中的一等公民,所以它们可以被传递,被困在其他函数中,并被视为任何其他对象。
您可能有兴趣阅读MDN documentation中有关功能的更多信息。他们解释了很多关于函数的对象,嵌套函数,闭包等等,如果你想了解如何最好地使用函数,你可能会对它感兴趣。
答案 1 :(得分:4)
第二个参数必须是函数 - 不是函数结果:
$(".box").each(changeMe);
function changeMe(n, obj) { ........
答案 2 :(得分:2)
因为$.each
的第二个参数应为function
。
如果您传递changeMe(this)
,则传递changeMe
的返回值 - 您应该将其包装到匿名函数中:
$.each($(".box"), function(){
changeMe(this)
});