做者:Anjolaoluwa Adebayo-Oyetoro翻译:疯狂的技术宅javascript
原文:https://blog.logrocket.com/us...css
未经容许严禁转载html
关于 jQuery 这个流行的 JavaScript 库如何死亡的问题一直在不断的被讨论。前端
随着现代库和框架的出现,浏览器 API 的标准化以及须要 jQuery 技能的职位减小,开发人员仍然须要继续学习 jQuery 吗。java
在本文中,我将介绍 jQuery 的历史、优势、缺点以及为何你仍要用它。jquery
根据 jQuery 的官方文档:ios
jQuery 是一个快速、小巧、功能丰富的 JavaScript 库。它经过易于使用的API在大量浏览器中运行,使得 HTML 文档遍历和操做、事件处理、动画和 Ajax 变得更加简单。经过多功能性和可扩展性的结合,jQuery 改变了数百万人编写 JavaScript 的方式。
基本上它是一个 JavaScript 库,它使在访问 DOM 的同时对 DOM 操做成为可能,并能在旧浏览器中用 JavaScript 执行某些几乎不可能作到的操做。它使编写 JavaScript 和 HTML 变得更容易,更简单。git
在2008年9月微软和诺基亚宣布公众对它的支持时,库的流行度有所提升,直到如今,它仍然在开发者的 JavaScript 库和框架中保持领先地位。许多著名的公司和库使用 jQuery 做为依赖(GitHub,Bootstrap 5)。程序员
它有一些很好的功能,人们以为有用。其中包括:github
使用 jQuery 须要付出必定的成本:
根据 BuiltWith 的数据显示,jQuery 为世界上前 100 万个网站中的79%提供了支持,并且有65% 的 JavaScript 库依赖它。
它仍受欢迎的一个缘由是许多项目仍然依赖它(例如:Bootstrap 4.0 及如下版本,大量的 WordPress 插件和主题都是使用 jQuery 构建的)而且还有许多依赖 jQuery 的遗留代码库。
下面是一些 jQuery 流行函数的替代品。
要在 jQuery 中选择一些东西,咱们一般会这样作:
// The selector name can be replaced with either an ID, a Class name or tag name $("selectorName") // #selectorName or .selectorName
这能够经过使用 HTML5 DOM API 来实现:
document.querySelector("selectorName") //gets a single item
或者
document.querySelectorAll("selectorName") //gets a group of items
.append()
方法将括号内的内容插入到选择器指定的元素的末尾。
$("selectorName").append( "Your content goes here")
与它等价的原生 js 代码能够像这样:
let element = document.querySelector('selectorName'); let text = document.createTextNode("your content"); element.appendChild(text);
.addClass()
方法把指定的类添加到由选择器指定的元素集中的每一个元素。
$('selectorName').addClass('className');
与它等价的原生 js 代码:
let element = document.querySelector("selectorName"); element.classList.add('className')
侦听 click
事件:
$('selectorName').on('click',function(e) { //do something });
与它等价的原生 js 代码:
let clickedMe = document.querySelector('button'); clickedMe.addEventListener('click', (e) => { //do something })
jQuery Ajax HTTP 请求是这样的:
$.ajax({ url: 'http://example.com/movies.json', type: 'GET' success: (response) => { console.log(response) } error: (errors) => { console.log(error) } })
这能够用 JavaScript fetch
API 替换,该 API 容许你发出异步请求。它将数据做为“Promise”返回。
fetch('http://example.com/movies.json', {method: 'GET', headers: {'Content-Type': 'application/json'}, }){ .then(response => response.json()) .catch(error => console.log(error)) }
虽然 Fetch 比 AJAX 更好,但它们是不同的,由于 Fetch 使用 promise,而且返回的 promise 不会拒绝 HTTP 状态错误。 Fetch 也不会从服务器发送或接收 cookie。
HTTP 请求也可使用像 axios
这样的专用库来实现。
Axios 是一个基于 Promise 的开源库,用于发出 HTTP 请求。
要使用 axios,你能够经过 npm 安装:
npm install axios --save-dev
而后你能够在本身的文件中导入它,以下所示:
import axios from 'axios'
你也可使用 axios 的 CDN 。
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
axios({ method: 'get', url: 'http://example.com/movies.json', responseType: 'json' }) .then(function (response) { });
要想在不一样浏览器中支持你的应用或网站,以及在旧版浏览器上工做,可使用转换工具,例如Babel 将 ES6 代码转换为与浏览器兼容的代码,能够在 polyfills 的帮助下经过浏览器了解特定功能以及其余工具,如 Autoprefixer 、PostCSS 等。
jQuery 中的动画是经过 .animate
方法实现的。
$(selectorName).animate( {parameters}, speed, callback );
经过使用 CSS 动画能够实现网站上的动画内容。
@keyframes
是一个用于动画内容的重要工具,用来定义要在舞台上应用的样式以及 animation
属性或其子属性,它被绑定到选择器,指定如何用关键帧样式及其应用的时机。
p{ animation-name: animated; animation-duration: ; } @keyframes animated{ 0% { opacity: 0; } 50% { opacity: 1; } 100% { opacity: 0; } }
<iframe name="cp_embed_1" src="https://codepen.io/jola_adeba...;amp;theme-id=0&default-tab=result&user=jola_adebayor&slug-hash=OeGpNE&pen-title=OeGpNE&name=cp_embed_1" scrolling="no" frameborder="0" height="344" allowtransparency="true" allowfullscreen="true" allowpaymentrequest="true" title="OeGpNE" class="cp_embed_iframe " id="cp_embed_OeGpNE" style="box-sizing: inherit; max-width: 100%; width: 730px; overflow: hidden; display: block;"></iframe>
也可使用 animate.css
之类的库来实现动画。
jQuery 被较少使用的一个主要缘由是 JavaScript 库和框架(例如ReactJS、AngularJS 和 VueJS)的兴起,在本节中咱们将看看它们的区别。
jQuery | React JS | Angular JS | Vue JS | |
---|---|---|---|---|
类型 | 库 | UI库 | 全功能框架 | 在库和功能齐全的框架之间进行扩展。 |
结构体系 | 模块化 | 基于组件的库,仅处理应用的View | 完善的基于组件的MVC框架 | 基于组件,侧重于 MVVM 模式的 ViewModel 层 |
DOM交互 | 直接更新 DOM | 使用与真实 DOM 链接的虚拟 DOM | 直接更新 DOM | 使用与真实 DOM 链接的虚拟 DOM |
数据绑定 | 带插件的数据绑定方法实现双向数据流 | 单向数据流 | 用 ngModel 能够实现双向数据绑定 | 响应式数据绑定系统可使用 V-model 实现双向数据 |
状态管理 | 可使用专门的库来实现 | Context API,Redux | 第三方库,如NGRX,NGXS等 | Vuex |
模板 | JavaScript | JavaScript(JSX) | TypeScript 和 Angular 指令 | HTML,CSS,JavaScript 和 Vue 指令 |
学习曲线 | 低 | 低,但须要较高水平的 JavaScript 知识 | 高 | 仅须要 JavaScript 的基础知识便可入门 |
.animate
方法。要在项目中使用jQuery,有几种方法能够入门。
在撰写本文时的最新版本是 3.4.1 压缩的生产版本或未压缩的开发版本。
你能够将它包含在项目中,以下所示:
<script type="text/javascript" src="js/jquery-3.4.1.js"> </script>
做为替代方案,你可使用包管理器:
npm install jquery 或者 yarn add jquery
并像这样导入:
import * as jQuery from 'jquery';
或者在项目中使用 CDN版本:
Google CDN
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
Microsoft CDN
<script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-3.4.1.js"> </script>
虽然趋势显示了开发人员从 jQuery 迁移到更新的库和框架的转变,可是它仍然很是活跃而且被积极使用,由于它与原生方法相比更容易实现你所要的功能。
技能需求率低也代表用更新的库或框架可能会更好,由于有更多的就业机会。
我建议学习 jQuery 以及在项目中用它实现一些基本的功能(技多不压身)。 文档可以帮你很快入门。