JQuery原理剖析——自己手写简易版JQuery

news/2025/2/19 9:07:05/

知其一后知其二;

目录

为什么需要JQuery

jQuery的概念:

在此之前回顾JavaScript对象知识:

自己手写的简易JQuery:


为什么需要JQuery

在我们之前写的JS代码中经常会遇见document.getElementById等等获取元素的对象,当大量的元素对象需要被获取时,就会有很多相似的代码被重复书写为此,为了减少代码的书写量、提高JavaScript开发效率,牛人写了一个jQuery;

jQuery的概念:

        jQuery是一种流行的JavaScript库,它简化了JavaScript编程,并提供了许多有用的功能和特性。它通过使用简洁的语法和封装复杂的操作,使得在网页开发中处理HTML文档遍历和事件处理、动画效果、AJAX等变得更加容易。

        jQuery为Web开发者提供了一个跨浏览器的API,可以让他们轻松地编写高效的JavaScript代码。可以在HTML中引入jQuery文件,然后使用jQuery API选择和操作页面元素、处理事件、发送Ajax请求、创建动画效果等。jQuery简化了DOM操作、事件处理、AJAX和动画等常见任务,让Web开发变得更加快捷和便捷。

        由于其易学易用、可扩展性强、兼容性好等优点,jQuery已经成为了最受欢迎的JavaScript库之一,并被广泛应用于各种类型的网站和Web应用程序中。


jQuery优点:

使用原生JavaScript编写复杂的DOM操作和事件处理代码会非常繁琐和耗时。而jQuery通过提供简单易用的API,使得开发者可以更快速、高效地完成这些操作。

牛人写的JQuery网址:如想使用只需在代码中加入一下代码:

<script type="text/javascript" src=".././jQuery/jquery-3.6.0.min.js"></script>

之前写的使用Ajax实现页面动态刷新效果的代码:

window.onload=function () {document.getElementById("btn1").onclick=function () {//1.创建XMLHttpRequest对象var xhr = new XMLHttpRequest();xhr.onreadystatechange=function (){if (this.readyState == 4) {if (this.status == 200) {document.getElementById("div1").innerText=this.responseText}else{alert(this.status)}}}let value = document.getElementById("ipt1").value;xhr.open("get","/ajax/ajaxrequest1?value="+value,true)xhr.send()}document.getElementById("btn2").onclick=function () {//1.创建XMLHttpRequest对象var xhr = new XMLHttpRequest();xhr.onreadystatechange=function (){if (this.readyState == 4) {if (this.status == 200) {document.getElementById("div2").innerText=this.responseText}else{alert(this.status)}}}xhr.open("post","/ajax/ajaxrequest1",true)xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded")let value1 = document.getElementById("ipt1").value;xhr.send("username="+value1)}}

可以看出,代码很复杂,相同的东西出现很多;

使用jQuery实现以上功能:

$(function () {$("#btn").click(function () {$.ajax({methodType: "post",url: "/ajax/ajaxrequest3",date: "username=zhangsan",asuyc: true,success: function (jsonst) {$("#div").html(jsonst.username)}})})})

由此可以看出JQuery的强大;为此学习JQuery的原理,自己手写了个简易版的JQuery,加深理解:

在此之前回顾JavaScript对象知识:

自己手写的简易JQuery:

    function JQuery(selector) {if (typeof selector == "string") {if (selector.charAt(0) == "#") {// var doc = document.getElementById(selector.substring(1))
//去掉var 使得doc升级为全局变量doc = document.getElementById(selector.substring(1))
//在没将doc升级为全局变量之前是无法调用封装进来的函数的,因为函数只能被对象调用,所以出现以下代码return new JQuery()}}if (typeof selector == "function") {window.onload = selector}this.html = function (htmlstr) {//定义全局变量docdoc.innerHTML = htmlstr}this.click = function (fun) {doc.onclick = fun}this.getvalue = function () {return doc.value}
//将Ajax封装成静态函数;JQuery.ajax = function (jsonstr) {var xhr = new XMLHttpRequest();xhr.onreadystatechange = function () {if (this.readyState == 4) {if (this.status == 200) {var jsonobj = JSON.parse(this.responseText);jsonstr.success(jsonobj)} else {alert(this.status)}}}// var jsonstr = JSON.parse(jsonstr);错误代码,if (jsonstr.methodType.toUpperCase() == "POST") {xhr.open("post", jsonstr.url, jsonstr.async)xhr.setRequestHeader("content-type", "application/x-www-form-urlencoded")xhr.send(jsonstr.date)}if (jsonstr.methodType.toUpperCase() == "GET") {xhr.open("get", jsonstr.url + "?" + jsonstr.date, jsonstr.async)xhr.send()}}}$ = JQuery
//如果没有以下代码,在调用Ajax时会报错,因为在此之前并没有在执行开始的return new JQuery(),
//所以并没有创建对象,所以无法调用new JQuery()

http://www.ppmy.cn/news/72651.html

相关文章

python获取某电商平台口红数据并制作词云

目录标题 前言开发环境:模块使用数据来源分析代码展示获取数据制作词云 尾语 &#x1f49d; 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 开发环境: Python 3.8 Pycharm 模块使用 requests jieba 结巴分词 wordcloud 词云 第三方模块安装&#xff1a; win R 输…

Spring中的MergedBeanDefinitionPostProcessor有什么作用 ?

Spring中的MergedBeanDefinitionPostProcessor有什么作用 ? 引言调用时机加载bean定义的几种方式postProcessMergedBeanDefinition接口作用小结 引言 MergedBeanDefinitionPostProcessor这个Bean后置处理器大家可能关注的比较少,其本身也只提供了一个bean生命周期回调接口: …

微信小程序vue+nodejs校园快递物流取件及上门服务系统uniapp

系统分为用户和管理员两个角色 用户的主要功能有&#xff1a; 1.用户注册和登陆系统 2.用户查看系统的公告信息 3.用户在线快递下单&#xff0c;支付订单&#xff0c;在线订购快递取件 4.用户在线预约快递&#xff0c;填写快递预约信息 5.用户个人中心在线充值 6.用户个人中心修…

光伏防逆流系统的介绍

安科瑞虞佳豪 5月17日&#xff0c;新疆和田地区洛浦县国家电投洛浦光伏电站&#xff0c;今年2月刚刚并网发电的200兆瓦光伏发电项目坐落于戈壁滩上&#xff0c;占地5500亩的368004块光伏面板在阳光照射下熠熠生辉&#xff0c;为和田地区经济社会发展持续提供着绿色能源。 洛浦…

今天面了个字节拿38K出来的,真是砂纸擦屁股,给我露一手

今年的春招已经结束&#xff0c;很多小伙伴收获不错&#xff0c;拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文&#xff0c;为此咱这里也统一做一次大整理和大归类&#xff0c;这也算是划重点了。 俗话说得好&#xff0c;他山之石…

PG事务:隔离级别基础

PG的事务 为了保证事务的ACID特性&#xff0c;rdbms必须要实现并发控制。pg和oracle、mysql(innodb)数据库都使用MVCC来实现并发控制。MVCC通过数据变化时不断生成新版本对象和可查询一定范围的老版本对象来实现并发&#xff0c;MVCC保存数据在某个时间点的快照&#xff0c;读…

SocketTools crack所有安全连接的默认安全协议

SocketTools crack所有安全连接的默认安全协议 在所有HTTP客户端组件中添加了对HTTP/2.0协议的支持。 更新了TLS 1.2(及更高版本)和SSH 2.0的安全选项&#xff0c;以使用Microsoft Windows 11和Windows Server 2022中提供的密码套件。较旧、安全性较低的密码套件已被弃用&#…

MJ discord 添加应用配置

discord 添加机器人 https://discord.com/developers/applications 刷新token后显示&#xff0c;即机器人Token&#xff0c;后续配置到 mj.discord.bot-token 如图勾选后&#xff0c;打开url进行授权 选择Midjourney Bot所在的服务器 勾上这两个选项&#xff0c;点击 Save Cha…