做者: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 以及在項目中用它實現一些基本的功能(技多不壓身)。 文檔可以幫你很快入門。