jq元素调用方法内部this指向为js对象,而不是jq对象

jq元素调用方法内部this指向为js对象,而不是jq对象

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title></title>

</head>

<body>

<div class="cls">

1

</div>

<div class="cls">

2

</div>

<div class="cls">

3

</div>

<script src="js/jquery1.8.3.js" type="text/javascript" charset="utf-8"></script>

<script type="text/javascript">

console.log($('.cls').each(function(){

console.log(this);

}));

</script>

</body>

</html>

打印的结果是http://img1.sycdn.imooc.com//climg/5ecdfca809aa3c6b04970269.jpg

上面是三个div,是js对象,我理解的应该是jq对象$('div')才对,this不是谁调用指向谁吗,$('.cls').each(function(){})这里是$('.cls')调用的,本来应该是指向这个jq对象的,但后面有each(),所以应该是指向$('.cls')中的每一个jq对象,输出为js对象不是很理解

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好,同学疑惑的点应该是不知道什么时候返回的是jq对象,什么时候返回的是DOM对象。可以参考下方的小例子:

http://img1.sycdn.imooc.com//climg/5ece469509584f2304850238.jpg

控制台:

http://img1.sycdn.imooc.com//climg/5ece46a80984793d05830217.jpg

从上面的打印结果可以看出,使用$()包裹的返回的是jq对象,如果使用了下标,那么将会返回DOM对象。

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

好帮手慕言 2020-05-27 17:14:36

同学你好,因为在同学的代码中,使用的是this,因此返回的是DOM对象,如果想要获取jq对象,需要使用$()包裹一下。例如:

http://img1.sycdn.imooc.com//climg/5ece2f5409db671003140063.jpg

如果我的回答帮到了你,欢迎采纳,祝学习愉快~

  • 提问者 王文辉 #1
    我测试了下,如果是jq对象调用,那么指向的是jq对象,比如说我这里改成 console.log($('.cls')[0],function(){ console.log(this)}); 输出结果是一个jq对象呢,我测试了下,
    2020-05-27 17:57:43
提问者 王文辉 2020-05-27 13:44:53

这里的猜想是,因为$(A).each()方法,会对A进行遍历,同时进行解析成js对象。所以each()特殊些,内部的this指向的事js对象,想用jq的方法要用$(this),不知道对不对

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师