我一直在遵循standard创建jQuery插件的方式。特别是关于不污染fn命名空间的一点。但是,我遇到了一些奇怪的事情,它违反了它自己的“从不使用$(this)
规则。”
var methods = {
init : function( options ) {
return this.each(function(){
var $this = $(this), //HERE
data = $this.data('tooltip'),
tooltip = $('<div />', {
text : $this.attr('title')
});
// If the plugin hasn't been initialized yet
if ( ! data ) {
/*
Do more setup stuff here
*/
$(this).data('tooltip', {
target : $this,
tooltip : tooltip
});
}
});
},
在这种特殊情况下重新评估this
是否必不可少?如果是这样,为什么?
答案 0 :(得分:2)
是的,是的。
在方法内部,this
指的是用于调用插件的jQuery对象,但是您使用each
来遍历这些元素。在each
的回调中,this
引用了jQuery对象中的DOM元素,因此您需要为每个元素创建一个新的jQUery对象,以便在其上使用jQuery方法。
答案 1 :(得分:0)
在each
循环中,this
是DOM元素,所以是$(this)
对于在其上使用jquery方法是必不可少的。
«never never $(this)
»规则关系到你返回的内容。返回$(this)
而不是this
的方法会破坏jquery prevObject
方法使用的end
属性之类的指针。