jQuery $(this)问题

时间:2011-05-06 01:39:32

标签: jquery this

我写了一些jQuery代码如下:

$('.button').each(function(){
    $(this).click(function(){
        console.log($(this));
        do_sth();
    });
});

var do_sth = function(){
    console.log($(this));
}

我希望console.log结果相同,但它的工作原理错误...第一个引用HTMLElement,但第二个引用DOMWindow ... 我怎么能重写do_sth函数使它们都引用HTMLElement? 感谢。

5 个答案:

答案 0 :(得分:9)

你可以......

do_sth.call(this);

或者,您可以使用jQuery的proxy()方法。

$.proxy(do_sth, this)();

jsFiddle

答案 1 :(得分:4)

1。您可以将其设为原型功能:

$.fn.do_sth = function() { console.log( this ); };

在另一个fn中,只需$(this).click(function() { $(this).do_sth(); });

2。您可以使用.call

do_sth.call(this);

3. 您可以将其更改为预期元素参数:

function do_sth( el ) { console.log( el ) }

答案 2 :(得分:1)

以下是:

$('.button').click(function() {
        do_sth.call(this);
    });
});

答案 3 :(得分:0)

将参数传递给您调用的函数。

$('.button').each(function(){
    $(this).click(function(){
        console.log($(this));
        do_sth(this);
    });
});

var do_sth = function(button){
    console.log(button);
}

这是一个小提琴:http://jsfiddle.net/JfwNJ/

答案 4 :(得分:0)

然后,编写do_sth函数以将$(this)元素作为参数:

var do_sth = function($el) {
  console.log($el)
}

然后这样做:

$('.button').each(function(){
    var $that = $(this);
    $(this).click(function(){
        console.log($that);
        do_sth($that);
    });
});