美文网首页我爱编程
Jquery插件内部this的指向

Jquery插件内部this的指向

作者: Suoz | 来源:发表于2016-11-23 10:56 被阅读124次

在jQuery插件的范围里, this关键字代表了这个插件将要执行的jQuery对象, 但是在其他包含callback的jQuery函数中,this关键字代表了原生的DOM元素。这常常会导致开发者误将this关键字无谓的包在jQuery中。可以看下面的例子:

<div class="content" style="background:#ff50000"></div>

<div class="box">hello world<div class=""inner></div></div>

html代码结构如上,然后写一个非常简单的插件,用于输出最高的div的高度值。

js代码是这样的:

(function ($) {

$.fn.maxheight = function(){

//在插件范围内,this指的是jquery插件将要执行的对象。并不是原生的dom元素,

//因此,直接用this即可,不需要用$(this).

var max = 0;

console.log(this);//此处this指的是要遍历的jquery对象集合

this.each(function(){

console.log(this);//此处this指的是dom元素,即要遍历的每一个dom元素。

//this->$(this) : DOM对象封装成Jquery对象

max = Math.max(max,$(this).height());//所以这里要使用$选取dom元素。

});

return max;

}

})(jQuery);

var maxheight = $("div").maxheight();

console.log(maxheight);

根据结果可以知道,第一个this指的是jquery对象,而在return this.each()中,this指的是div元素,所以必须使用$将this包裹起来,选取dom元素,再进行操作。

注:

1. 此处说的this与当前调用的作用域有关。在全局变量下,this指向windows变量;在局部变量下,this指向你所调用的当前对象。

关于$(this)和this, 你关键还是要知道this表示的是什么, 如果this是一个dom元素, 那么$(this)是一个jquery元素, 如果this是一个jquery元素, 那么$(this)还是一个jquery元素, 虽然你用==去判断两者是不同的, 但是他们内容都是一样的, 这是我的经验, 我并没有去深入看过源码, jquery的api中似乎也没有说这个.

关于this和$(this)还要注意一点$('.abc').click(function(){});中this是dom元素, $(this)是jquery元素, 而写插件的时候, 由于是扩展prototype, 所以this就是对象实例, 即this就是jquery对象, $(this)还是jquery对象, 他们虽然不是同一对象, 但是内容是完全相同的

转自http://www.cnblogs.com/wayofeng/p/5701878.html

相关文章

网友评论

    本文标题:Jquery插件内部this的指向

    本文链接:https://www.haomeiwen.com/subject/uvtdpttx.html