$(this)如何在全球范围内使用

时间:2013-10-01 14:08:05

标签: javascript jquery global-variables this local-variables

在JQuery中,似乎$(this)仅在本地工作。

举个简单的例子:

$(".someClass .type1").click(function(){
    $(".someClass .type1").html("<img src='image/2.png'>");
    $(this).html("<img src='images/img.png'>");
});

$(".otherClasses").click(function(){
    $(".otherClasses .type1").html("<img src='image/2.png'>");
    $(this).html("<img src='images/img.png'>");
});

理想情况下,我想写一个这样的函数:

function changeImg () {
   $(this).html("<img src='images/img.png'>");
}

然后在jquery点击函数下调用changeImg(),如:

$(".someClass .type1").click(function(){
        $(".someClass .type1").html("<img src='image/2.png'>");
        changeImg();
});

然而,通过这种方式,$(this)将是'undefined'而不是被点击的那个。有没有办法让它像全局变量一样可用?

谢谢!

3 个答案:

答案 0 :(得分:3)

this作为参数传递给您的函数:

function changeImg (el) {
   $(el).html("<img src='images/img.png'>");
}

$(".someClass .type1").click(function(){
        $(".someClass .type1").html("<img src='image/2.png'>");
        changeImg(this);
});

答案 1 :(得分:3)

您可以这样设置上下文:

changeImg.call(this);

请参阅MDN for Function.prototype.call

答案 2 :(得分:1)

使用

 changeImg(this); // pass this here 

您的代码变为

$(".someClass .type1").click(function(){
            $(".someClass .type1").html("<img src='image/2.png'>");
            changeImg(this); // pass this here 
    });
function changeImg (elem) {
   $(elem).html("<img src='images/img.png'>");
}