我试图制作一个干净的jQuery代码,然后把所有的东西放在一个我称之为“each”的函数中。问题是没有任何反应,并且在控制台中没有出现任何错误。
这是一个示例代码:
$(function() {
$('.myElement').each(function() {
if($(this).children()) {
myFunction();
} else {
myFunction('.myOtherElement');
}
});
});
function myFunction(selector) {
if(!selector) {
$(this).html('Finish');
} else {
$(this).find(selector).html('Finish');
}
}
如果我把我的功能内容放在.each它可以工作,但是在一个单独的函数中没有,我认为它应该工作。为什么这段代码不起作用?
答案 0 :(得分:7)
执行上下文(this)在这种情况下有所不同,您可以使用.call()来应用它
$(function() {
$('.myElement').each(function() {
if($(this).children()) {
myFunction.call(this);
} else {
myFunction.call(this, '.myOtherElement');
}
});
});
答案 1 :(得分:2)
问题是this
在你的案例中不是.each
内的对象,而是window
对象。要将this
绑定为jquery对象 ,而不必每次使用{{1>}时都应用上下文 。您可以将其定义为jquery插件函数
call