造轮子之jQuery原理,30行代码实现jQuery

        现在都用vue,之前写过一篇仿vue2的文章造轮子之Vue实现原理,几十行代码实现Vue,几乎没人用jQuery了,不过有些需要动态修改dom的应用,用jQuery还是灵活一些,尤其是自己想写个小项目,jQuery太大了,有些功能自己用不到,所以今天趁闲暇时间写了个仿的jQuery,没心思看jQuery源码,所以只是功能上的模仿,没用jquery那种对象的写法(return this实现链式操作),直接用递归实现的链式操作,不多说,下面还是先上代码。

function $(ele){
			let nodes={

			};
			if(typeof ele=="string"){
				let tmp=document.querySelectorAll(ele);
				for(let i=0;i<tmp.length;i++){
					nodes[i]=tmp[i];
				}
				nodes.length=tmp.length;
			}else if(ele instanceof Node){
				nodes={
					0:ele,
					length:1
				}
			}else if(ele instanceof NodeList){
				for(let i=0;i<ele.length;i++){
					nodes[i]=ele[i];
				}
				nodes.length=ele.length;
			}
			nodes.eq=function(num){
				return $(this[num]);
			}
			nodes.find=function(ele){
				return $(this[0].querySelectorAll(ele));
			}
			nodes.text=function(str){
				if(str==undefined){
					return nodes[0].innerText;
				}else{
					return nodes[0].innerText=str;
				}
			}
			return nodes;
		}

目前只实现了eq(),find(),和text()方法,其他方法可以参照这个实现,很简单,下面给个demo测试一下,代码如下

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<style>
			
		</style>
	</head>
	<body>
		<table>
			<tr>
				<td>王某</td><td>26</td>
			</tr>
			<tr>
				<td>刘某</td><td>26</td>
			</tr>
			<tr>
				<td>张某</td><td>26</td>
			</tr>
		</table>
	</body>
	<script language="javascript">
		function $(ele){
			let nodes={

			};
			if(typeof ele=="string"){
				let tmp=document.querySelectorAll(ele);
				for(let i=0;i<tmp.length;i++){
					nodes[i]=tmp[i];
				}
				nodes.length=tmp.length;
			}else if(ele instanceof Node){
				nodes={
					0:ele,
					length:1
				}
			}else if(ele instanceof NodeList){
				for(let i=0;i<ele.length;i++){
					nodes[i]=ele[i];
				}
				nodes.length=ele.length;
			}
			nodes.eq=function(num){
				return $(this[num]);
			}
			nodes.find=function(ele){
				return $(this[0].querySelectorAll(ele));
			}
			nodes.text=function(str){
				if(str==undefined){
					return nodes[0].innerText;
				}else{
					return nodes[0].innerText=str;
				}
			}
			return nodes;
		}





		let tr=$("tr");
			for(var i=0;i<tr.length;i++){
				console.log(tr.eq(i).find("td").eq(0).text());
			}
	</script>
</html>

tr=$("tr");

tr.eq(i).find("td").eq(0).text();

执行之后可以看到控制台里已经输出了相应的姓名

可以看到链式操作和jQuery的完全一样。

今天就先分享到这

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值