分享

Jquery中的this与$(this)

 quasiceo 2014-05-19
序言:在使用jquery操作js时,经常整不明白this与$(this)。抽空仔细测试了一把,记录下来以供在忘记的时候拉出来参考参考!

$(this)生成的是什么

$()生成的是什么呢?实际上$()=jquery(),那么也就是说返回的是一个jquery的对象。

题外话:通常我们为了简便直接使用$(),实际上,该函数省略了一个参数context,即$(selector)=$(selector,document).如果指定context,可以指定context为一个dom元素集或者jquery对象。

那么依照,$()返回的是jquery对象这一结论,我们可以得出$(this)得到的是一个jquery对象.我们可以使用万能的alert()方法打印出一个对象:
alert($('#btn'));显示的结果:
test 该图红色框勾选出来的是一个object,不用考虑,该object自然是jquery的对象咯。也即是说我们用通过$('#btn')来调用jquery的方法和属性等。

 

this代表什么?

this,编程的人都知道this表示上下文所处的这个对象,这个自然是不错的,可是这个对象到底是个什么对象呢?加入js里面也有getType的话返回的值会是什么呢?其实js里面不需要使用getType,因为我们有万能的alert.请看看下面的代码:

$('#btn').bind("click",function(){

alert(this);
alert($(this));

});

根据我们的经验(因为$()生成的是jquery的对象嘛),this自然是一个jquery的对象咯。可是我们看看返回的结果:
test1返回的是什么?【object HTMLInputElement】——伟大的html对象,嘿嘿。所以我们通常在直接使用this.val()或者直接通过this来调用jquery所特有的方法或属性的时候会报错误:mistake  为什么呢?明知故问!html对象当然“不包含属性或方法”了。那么为什么在一个jquery对象的上下文中调用this返回的是一个html对象而不是jquery对象 呢?翻遍jquery的api文档,貌似jquery中并未对this这一关键字进行过特殊“处理”,也就是说这里this是js中的,而不是jquery重新定义了的。so...当然这仅仅是我自己的想法,如果有对此更了解的朋友可以留言更正。而我们再看一下以上代码中alert($(this));的返回,自然是jquery的对象了,在此调用jquery特有的方法和属性,完全没有问题。
结论:
this,表示当前的上下文对象是一个html对象,可以调用html对象所拥有的属性,方法
$(this),代表的上下文对象是一个jquery的上下文对象,可以调用jquery的方法和属性值。
posted on 2009-08-27 15:47 Chris.gong 阅读(46687) 评论(7) 编辑 收藏

发表评论
  
#1楼 2010-09-08 17:50 | 顾晓北  
在浏览器中的表现一样吗?我写的一小段儿jquery,实现功能是如果图片的高度或者宽度大于500了,就等比例缩放,要迭代所有img元素,但是在迭代的时候,火狐中正常,但是在ie的各个版本中表现各不相同,ie6下面好像把this当做是document对象了(我知道本来this本来在ie跟火狐中就意义不同,但jquery不是已经改变了吗),ie7中虽然样式没有大的改变,但是中间内容还是有改变,ie8下竟然也有很大改变(在ietester中测试),这个问题怎么解决呢?我这样获取这个图片,jquery(“img”)。each(function(){
jquery(this)...//操作,改变高度
})
  
  
#6楼 2014-02-18 15:10 | yincanjava  
难道是2009年的时候jquery没有封装?
现在测试$(this)和this返回的都是一个jquery对象,即返回的是一个object,可能那时候jquery还不支持this的封装吧。。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多