猿问

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

<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是啥?

Smart猫小萌
浏览 533回答 3
3回答

收到一只叮咚

each(callback) 返回值:jQuery以每一个匹配的元素作为上下文来执行一个函数。意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素)。而且,在每次执行函数时,都会给函数传递一个表示作为执行环境的元素在匹配的元素集合中所处位置的数字值作为参数(从零开始的整型)。 返回 'false' 将停止循环 (就像在普通的循环中使用 'break')。返回 'true' 跳至下一个循环(就像在普通的循环中使用'continue')。这是jquery手册里写的,既然你用了.each,那你就要遵循.each的规则,里面的this是指向对象(你js里定义的span而非html的标签)内的DOM元素,不知道我这样解释你是否明白。

HUX布斯

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

相关分类

JavaScript
我要回答