为什么当我在一个单独的函数中使用$(this)而我在.each()中调用它时它不起作用?

时间:2013-09-07 11:18:14

标签: javascript jquery

我试图制作一个干净的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它可以工作,但是在一个单独的函数中没有,我认为它应该工作。为什么这段代码不起作用?

2 个答案:

答案 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