为了账号安全,请及时绑定邮箱和手机立即绑定

一个javascript小问题,为什么this表示的是DOM对象?

一个javascript小问题,为什么this表示的是DOM对象?

Smart猫小萌 2019-02-13 15:11:44
<div><span>文本1</span></div><p><span>文本2</span></div><script language="javascript">var span = $("span");span.each(function(n){this.sytle.fontsize = (n+1)*12+"px";});</script>这里用到了jquery。span = $("span"); 得到的span不是已经是jquery对象了吗?怎么在span.each(fn)里面this又指的是DOM对象了呢?想用jquery的方法还得需要把$(this).css("font-size",(n+1)*12+"px");那这里的this指的不是span吗? 可是span不是已经是jquery对象了吗? 哦,听了回答者: loveOuyoko的明白一些了。不过你说的《匿名函数没有显式的调用者,所以只能是最上层的dom代表this》中最上层的dom是什么?一个匿名函数没有调用者那么他的最上层的dom是啥?
查看完整描述

3 回答

?
收到一只叮咚

TA贡献1821条经验 获得超5个赞

each(callback) 返回值:jQuery

以每一个匹配的元素作为上下文来执行一个函数。

意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素)。而且,在每次执行函数时,都会给函数传递一个表示作为执行环境的元素在匹配的元素集合中所处位置的数字值作为参数(从零开始的整型)。 返回 'false' 将停止循环 (就像在普通的循环中使用 'break')。返回 'true' 跳至下一个循环(就像在普通的循环中使用'continue')。

这是jquery手册里写的,既然你用了.each,那你就要遵循.each的规则,里面的this是指向对象(你js里定义的span而非html的标签)内的DOM元素,不知道我这样解释你是否明白。

查看完整回答
反对 回复 2019-03-25
?
HUX布斯

TA贡献1876条经验 获得超6个赞

jquery只不过是把js封装的一个框架而已,为了是方便实现一些比较复杂的功能,底层代码还是js,jquery对象就是DOM对象
比如:span = $("span"); 实际上就是span = document.getElementById("span");没区别,只是用 $的写法简化了你的编程,且用起来更容易。
this在js里可以理解成指针的意思,指代上层对象的引用,当然this有时候会用复杂的变化,指向的上层对象会不同,这里我就不细说了。
所以不管是jquery方法还是js方法,其实都是一样的,想怎么写都行,把功能实现就好了,别把事情搞复杂了

查看完整回答
反对 回复 2019-03-25
  • 3 回答
  • 0 关注
  • 532 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号