问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

在js中this指代当前元素dom对象,可以通过什么转化jquery对象?

发布网友 发布时间:2022-04-19 22:27

我来回答

2个回答

懂视网 时间:2022-04-20 02:48

前言:说到jquery不得不说的就是强大的jquery的选择器功能啦。该功能很强大,还单独分离出来sizzle模块供只需用到选择器功能的朋友使用。(该篇先不说jquery选择器的强大功能,先说说jquery是如何将DOM元素封装成jquery对象的)

一、Dom对象和jquery对象

<body>
<script src="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script>
<p id="box">测试</p>
<script>
	var oBox = document.getElementById('box');
	var oBox2 = document.querySelector('#box');
	var $Box = $('#box');
	
	console.log(oBox);
	console.log(oBox2);
	console.log($Box);
</script>
</body>
</html>

运行结果:


从中我们就可以看出区别了,$()把DOM对象封装成jquery对象,而DOM对象也就保存在jquery[0]中,这也就是为什么我们说的把jquery对象转化成DOM对象只需用jquery[0]或者jquery.get(0)了。


二、模拟jquery--根据id,封装jquery对象

这里先简化一下,看看封装jquery对象的一部分过程

<body>
<script src="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script>
<p id="box">测试</p>
<script>
	var $Box = $('#box');
	console.log('这是jquery对象');
	console.log($Box);
	
	
	console.log('------分界线------');
	(function(window,undefined){ 
		var jQ = function(selector){ 
			return new jQ.fn.init(selector); 
		}; 
		jQ.fn = jQ.prototype = { 
			jquery:'2.0.0', //jquery版本号信息
			constructor: jQ, //添加构造器属性
			length:0,			//初始length属性
			selector:'',		//初始selector属性
			init: function(selector){
				var match, elem, rquickExpr = /^(?:s*(<[wW]+>)[^>]*|#([w-]*))$/;
				match = rquickExpr.exec( selector );
				//console.log(match);	//正则匹配找出id的值
				if ( !selector ) {	//如果selector为'',null,undefind直接退出操作
					return this;
				}
				elem = document.getElementById(match[2]);
				this[0] = elem;
				this.context=document;
				this.length = 1;
				this.selector = selector;
				
				return this;
			} 
		} 
		jQ.fn.init.prototype = jQ.fn; 
		 
		window.$$ = jQ; 	
	})( window ); 
	
	console.log('这是模拟的对象');
	console.log($$('#box')); //
输出封装的对象 </script> </body>

②输出结果:(火狐浏览器上打开的)


这里需要注意的是,chrome浏览器在显示上有会些不同


jquery显示的是类数组对象形态。

③、解析

对于上面代码有很多看不明白的朋友建议看一下我前面写的文章【jquery源码】开始学习源码之前需要解决的一些问题。

正则匹配我是直接复制了源码中的正则,可以输出该正则处理后的结果来看看。



三、模拟jquery--根据标签名,封装jquery对象

直接上代码

<body>
<ul class="list"> 
 <li>测试1</li>
 <li>测试2</li>
 <li>测试3</li>
 <li>测试4</li>
</ul>
<script>
	
	console.log('这是jquery对象');
	var aLi1 = $('li');
	console.log(aLi1);
	
	
	console.log('------分界线------');
	(function(window,undefined){ 
		var jQ = function(selector,context){ 
			return new jQ.fn.init(selector, context); 
		}; 
		jQ.fn = jQ.prototype = { 
			jquery:'2.0.0', //jquery版本号信息
			constructor: jQ, //添加构造器属性
			length:0,			//初始length属性
			selector:'',		//初始selector属性
			init: function(selector, context){
				var match, elem;
				
				if ( !selector ) {	//如果selector为'',null,undefind直接退出操作
					return this;
				}
				elem = document.getElementsByTagName(selector);
				for(var i =0,len=elem.length; i<len; i++){
					this[i] = elem[i];
				}
				this.context=document;
				this.length = elem.length;
				this.selector = selector;
				
				return this;
			} 
		} 
		jQ.fn.init.prototype = jQ.fn; 
		 
		window.$$ = jQ; 	
	})( window ); 
	
	console.log('这是模拟的对象');
	console.log($$('li')); //
输出封装的对象 </script> </body>

输出结果:

这里只是单纯的模拟,jq处理起来远远没有那么简单,jquery还进行了大量的判断(下面的文章会继续说这个问题)。还可以在jquery对象中发现prevObject属性,该属性保存的是上一级的查找对象。看看下面的例子就能明白了。

<body>
<script src="https://cdn.bootcss.com/jquery/2.0.0/jquery.min.js"></script>
<ul class="list"> 
 <li>测试1</li>
 <li>测试2</li>
 <li>测试3</li>
 <li>测试4</li>
</ul>
<script>
	var aLi1 = $('li');
	console.log(aLi1);
	
	var aLi2 = $('li','.list');
	console.log(aLi2);
	
	var aLi3 = $('.list').find('li');
	console.log(aLi3);
</script>
</body>



本文讲解了$选择器--是如何将DOM封装成jquery对象,更多相关内容请关注Gxl网。

相关推荐:

css3动画导航栏3D

requests库的基本使用

前端调用微信支付接口

热心网友 时间:2022-04-19 23:56

可以使用$(this)即可转换,
注:而dom对象转为jquery对象,仅需要$( dom对象 ) 即可
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
形容手表很舒服的句子 情侣手表的对话句子 租门面和房东鉴了十年合同,房东要退店面,我可以不退吗,继续经 ...一篇朝花夕拾里十篇小短文的主要内容及作者的情感和主要人物的... 什么叫狼狗 狼狗的生活习性有哪些? 起个姓罗好听的宝宝名字 野火的近义词 个是词语解释 请旌词语解释 苹果6plus没有后台保存功能吗?每次切换后台程序都要重新启动!!!!!看电影 看书 微信什么的 《阅读训练80篇》四年级《永生的眼睛》最后一句话中,骄傲的光彩指的是什么 小猪微信营销怎么把制作好的文档生成超链接 为什么做校园新媒体? 哪个品牌的实木地板比较环保呢? 问下,什么品牌的木地板环保呢? 做校园新媒体的原因? 哪一家的实木地板比较环保呢? 排名前十的木地板中,什么样的地板更环保? 什么品牌的木地板更加的环保呢? 如何增加服装店的客流量? 服装店人流量少怎么办 帮我把这两个名字弄上特殊符号要唯美好看 游戏用的情侣... 遇到顾客投诉怎么处理 如果注册个小规模纳税人,一个月要交多少税啊,就这 银宝信云音箱能连手机蓝牙吗 云音响s02怎么打开蓝牙 补充协议效力优于原合同吗 重新签订的合同与原合同关系 jquery怎么把dom对象转为jquery对象 我跟我的英语老师有了性行为,她结婚了,我该怎么办。。。我很害怕 超想让我英语老师跟我xx,她经常运动身材超好,去她家补习我都会占她便宜,我要怎么样她才会跟我sha 保时捷taycan年购置税期限 昨天晚上去英语老师家补课,然后她每次补课都要侧面的跟我说一些性方面,然后昨天她不知道怎么套话问我下 保时捷taycan免不免购置税 救命啊!我实在没有足够的定力。跟我英语老师那个了。现在她的肚子已经很大的明显了。我该怎么办呢! 英语老师要我下晚自习去她家,我该怎么办啊? 我喜欢上了英语老师 我是女的 她也是女的 嗨,保时捷。怎么设置? 2021 保时捷极致体验燃擎再启 —— 即将亮相邯郸 保时捷极致体验再燃激情 2021西安站焕新登场 最适合春节开的PHEV 三款免购置税插混SUV新车推荐 试驾Taycan,趁机拍了点照片,帅惨了,谈谈感受 保时捷加推Taycan基础版,888吉祥价截胡Model S 88.8万基础版Taycan对比高性能版Model S:终于正面刚上了 exe格式文件怎么创建 性能方面优化!2021款保时捷Taycan 怎样设置能使avast!自动扫描迅雷下载完的文件,我在avast!的文件夹中没找到avast.exe?(请详细些) avast!设置问题!高手帮忙! 关于avast!十万火急