我写了一些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? 感谢。
答案 0 :(得分:9)
答案 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);
});
});