彻底抛弃 jQuery ,不然还留着过年?
我以前很喜欢 jQuery,而且说实话,我是先学jQuery,再学 JavaScript 的。所以我写这篇文章有点像是在背叛 jQuery。
我知道,关于为什么不应该用 jQuery 的文章已经汗牛充栋,但我只是想说下自己的亲身体验。

不用 jQuery 用什么?
随着 web 的发展,新技术长江后浪推前浪,前浪死在沙滩上。就像有些编程语言曾经辉煌过,现在也消失不见了。我认为 jQuery 也不例外,是时候跟 它说再见了,虽然它曾经给我们带来过美妙的编程体验。
为什么要放弃 jQuery 呢?因为有 Vue 啊!如果你看过我之前的文章,你应该能猜到我是 Vue.js 粉。Vue.js 提供了非常多的工具,我敢说它比jQuery 方便多了。
DOM 与事件
让我们来看一个点击事件的例子。
请注意,我省略掉了框架的初始化部分
一个 Vue SFC(别慌,意思就是Single File Component,单文件组件):
<template>
<button @click="handleClick">点我,用力</button>
</template>
<script>
export default {
methods: {
handleClick() {
alert('老铁,你点击了按钮');
}
}
}
</script>
用 jQuery 是这样写的:
<button id="myButton">点吧</button>
<script>
$('button#myButton').click({
alert('这次用 jQuery');
});
</script>
你可能会觉得 Vue.js 的代码更多啊,你说的没错,但也不对!Vue.js 并不是有更多代码,实际上除了 handleClick() { ... } 之外的部分只是框架的结构,跟其他行为是共用的。我觉得 Vue.js 看起来更整洁,代码可读性更高。
你心里可能还有一个疑问,你还是用了 Vue.js 啊,五十步笑百步?有本事别用!实际上你完全可以用原生 JavaScript 实现:
<button id="myButton">来点我呀</button>
<script>
document.getElementById('myButton').addEventListener('click', function() {
alert('来自原生js的问候');
});
</script>
所以你看,jQuery 只是背着我们把代码翻译成原生 JavaScript 而已,假装自己很特别。
至于 DOM 元素的选择操作,用原生 JavaScript 可以轻松做到:
document.getElementById('myButton'); // jQuery => $('#myButton');
document.getElementsByClassName('a'); // jQuery => $('.a');
document.querySelectorAll('.parent .a'); // jQuery => $('.parent .a');
AJAX 请求
jQuery 被用得最多的方面可能就是 AJAX 了。
我们都知道 jQuery 提供了 $.ajax() ,也可以分别用具体的 $.post() 和 $.get() 。这些 API 可以帮你发送 AJAX 请求,获取结果等等。
你可以用原生 JavaScript 的两个方法,那就是 XMLHttpRequest 和 fetch。
XMLHttpRequest 也算是个老古董了, 跟 fetch 相比还不太一样。
fetch 更加时新,也比 XMLHttpRequest 更常用,而且是基于 promise 的。
fetch 默认不发送 cookies,并且如果 HTTP 状态码返回错误码,比如404或500,它不会 reject,因此基本上 .catch() 不会运行,而是 response.ok 变成 false。
在这里就不详细对比它们了。
我们还是来看两段代码。
这是 jQuery:
$.ajax({
method: "POST",
url: "http://localhost/api",
data: { name: "Adnan", country: "Iran" }
}).done(response => console.log(response))
.fail(() => console.log('error'));
示例代码来自 jQuery 官方文档
这是 fetch:
fetch(
'http://localhost/api',
{
method: 'POST'
body: { name: "Adnan", country: "Iran" }
}
).then(response => console.log(response));
两段代码做的事情是一样的,但fetch 不属于任何库。
请注意, fetch 也可以跟 async/await 结合使用,如下所示:
async function getData() {
let response = await fetch('http://localhost/api' {
method: 'POST'
body: { name: "Adnan", country: "Iran" }
});
return response;
}
那我自己用 fecth 吗?实际上没有,因为我不太信任它,原因有很多。因此我在用一个叫 axios 的库,也是基于 promise 的,同时非常可靠。
上面的代码用 axios 写是这样的:
axios({
method: 'POST',
url: 'http://localhost/api',
data: { name: "Adnan", country: "Iran" }
}).then(response => console.log(response))
.catch(err => console.log(err));
axios 也可以跟 async/await 结合使用:
async function getData() {
let response = await axios.post('http://localhost/api' {
name: "Adnan",
country: "Iran"
});
return response;
}
总结
我现在自已经不再用 jQuery 了,尽管我曾经非常喜欢它,那个时候项目初始化后的第一件事就是安装 jQuery。
我相信我们已经不再需要 jQuery 了,因为其他库和框架实际上能比 jQuery 更方便、更简洁地完成任务。
可能还有大量的插件基于 jQuery,但基本上都有相应的 Vue.js 或者 React.js 组件替代品。
你们怎么看?欢迎在评论区留言!
交流
欢迎扫码关注微信公众号“1024译站”,为你奉上更多技术干货。

彻底抛弃 jQuery ,不然还留着过年?的更多相关文章
- 抛弃jQuery:DOM API之选择元素
原文链接:http://blog.garstasio.com/you-dont-need-jquery/selectors/ 我的Blog:http://cabbit.me/you-dont-need ...
- 抛弃jQuery:Why?
原文链接:http://blog.garstasio.com/you-dont-need-jquery/ 我的Blog:http://cabbit.me/you-dont-need-jquery/wh ...
- 抛弃jQuery:DOM API之操作元素
原文链接:http://blog.garstasio.com/you-dont-need-jquery/dom-manipulation/ 我的Blog:http://cabbit.me/you-do ...
- 抛弃jQuery,拥抱原生JavaScript
前端发展很快,现代浏览器原生 API 已经足够好用.我们并不需要为了操作 DOM.Event 等再学习一下 jQuery 的 API.同时由于 React.Angular.Vue 等框架的流行,直接操 ...
- Jquery 提示还可以输入的字数,将多余的字数截取掉
js代码: $(function () { var counter = $("#divform textarea").val().length; //获取文本域的字符串长度 $( ...
- 抛弃jQuery 深入原生的JavaScript
虽然我已经做网站建设工作10多年了,但我从最近3年才开始更多地学习如何更好的将纯JavaScript用于工作中,而不总是将jQuery考虑在第一位.现在我每天学习很多东西.这个过程让我觉得Adtile ...
- [转]抛弃jQuery,使用原生JavaScript
原文链接 Document Ready 事件 在jQuery中,document.ready可以让代码在整个文档加载完毕之后执行: $(document).ready(function() { // ...
- jQuery? 回归JavaScript原生API
如今技术日新月异,各类框架库也是层次不穷.即便当年漫山红遍的JQuery(让开发者write less, do more,So Perfect!!)如今也有被替代的大势.但JS原生API写法依旧:并且 ...
- 【翻译】jQuery是有害的
原文:http://lea.verou.me/2015/04/jquery-considered-harmful/**(第一次翻译,望大家多批评指正) jQuery是有害的 嗨,我总想写一个“X”是有 ...
随机推荐
- 题解:[ZJOI2014]璀灿光华
原题链接 OJ 题号 洛谷 3342 loj 2203 bzoj 3619 题目描述 金先生有一个女朋友没名字.她勤劳勇敢.智慧善良.金先生很喜欢她.为此,金先生用\(a^3\)块\(1 \times ...
- Docker底层原理(三)
1. 我们运行:docker run hello-world 由于本地没有hello-world,所以会远程下载一个hello-world的镜像,并在容器内运行. 2. docker run干了什么?
- 大宗商品市场的未来王者 | 现货贸易商PK期货风险管理子公司
https://mp.weixin.qq.com/s/z-kkeIor6vDb9Oer73Ct6w 大宗商品市场卧虎藏龙,参与者众多,然而能称之为王者的却寥寥无几. 在国外,以嘉能可.托克.摩科瑞为代 ...
- NOIP 2003 乒乓球
洛谷 P1042 乒乓球 https://www.luogu.org/problemnew/show/P1042 JDOJ 1363: [NOIP2003]乒乓球 T1 https://neooj.c ...
- C# 一般处理程序
public class Three : IHttpHandler{ public void ProcessRequest(HttpContext context) { context.Respons ...
- navicat密码错误的问题
上集说到我的navicat打不开对吧..‘ 这下就来聊聊打开了的问题 下午非常开心,就打开了mysql的图形化界面, 但是,在我连接数据库的时候就报错了 错误就是密码错误那行 什么什么‘localho ...
- 【Comet OJ - Contest #0 A】解方程(数学水题)
点此看题面 大致题意: 给定自然数\(n\),让你求出方程\(\sqrt{x-\sqrt n}+\sqrt y-\sqrt z=0\)的自然数解\(x,y,z\)的数量以及所有解\(xyz\)之和. ...
- 洛谷 P4053 [JSOI2007]建筑抢修
传送门 思路 首先题意比较容易明白: n个建筑需要修复,只能同时修一个建筑,每个建筑修复需要t1时间,且必须在t2时间前修完,否则此建筑报废 问最多能修好多少个建筑 如果一个建筑在规定时间内没有修好的 ...
- [LeetCode] 43. Multiply Strings 字符串相乘
Given two non-negative integers num1 and num2represented as strings, return the product of num1 and ...
- Casbin权限模型
权限框架casbin1.概述Casbin是一个强大的.高效的开源访问控制框架,其权限管理机制支持多种访问控制模型. Casbin支持以下编程语言: Casbin可以做到:支持自定义请求的格式,默认的请 ...