2017-05-24 140 views
0

我试着写一个小jquery插件。在过去,我主要使用JavaScript。 我不明白th​​is.each函数。首先我为$ .fn写一个新的方法。在这个方法中,我想获得offset()。所有元素的顶部。jquery插件this.each功能

$.fn.jquerynParalFade = function() { 
    this.each(function() { 
    console.log($(this).offset().top); 
    }); 
} 

这对我很好。但是,如果我调整屏幕大小(例如在转动我的设备)我想获得所有元素的新位置。为此,我添加了一个可以在调整大小时运行的函数。

$(window).resize(function() { 
    resize(); 
}); 

现在我有问题,我不能使用this.each()里面的函数。相反,我使用$(this).each。但是,如果我做控制台告诉我,offset()不是$(this)的功能。

这是代码如下所示:

function resize(){ 
    $(this).each(function(index) { 
    console.log($(this).offset().top); 
    }); 
} 

我那么如何使用this.each在jQuery插件的功能?

+0

'$(this)'应该是什么?因为当你调用'resize()'时,你不会把'this'设置为任何东西。 –

回答

1

您必须绑定什么this是你的功能方面的调整大小正常工作:

var myResize = resize.bind(this) 
myResize() // now it should work 

另一种方式是通过上下文:

function resize (context) { 
    context.each(...) 
} 

$(window).resize(function() { resize(this) }) 

一些概念阅读关于:

+0

我真的很想理解它!我想我明白第二个。但它不起作用。控制台告诉我context.each不是一个函数。但不重要,因为我相信第一个更聪明。但我不明白绑定方法。我将它绑定到我的调整大小功能?如果是的,为什么我将绑定保存在变量上?你在下一行中调用新变量吗?对不起,有很多问题! –

+0

顺便说一句,控制台告诉我,调整大小功能里面是这样的:Window→file:/// C:/xampp/htdocs/parallax/index.html。这是否正确?因为我期待一个物体? –

+0

确定阅读url后我知道了。他们非常有帮助。万分感谢! –