摘要:使用替換曾風(fēng)靡一個(gè)時(shí)代,大大降低了前端開發(fā)的門檻,豐富的插件也是前端開發(fā)者得心應(yīng)手的武器庫,但是,這個(gè)時(shí)代終于要落幕了。選取元素選擇器查詢常用的屬性選擇器都可以使用或替代。返回第一個(gè)匹配的返回所有匹配的組成的。最后使用方法觸發(fā)對(duì)象。
使用 javascript 替換 jQuery
jQuery 曾風(fēng)靡一個(gè)時(shí)代,大大降低了前端開發(fā)的門檻,豐富的插件也是前端開發(fā)者得心應(yīng)手的武器庫,但是,這個(gè)時(shí)代終于要落幕了。隨著 JS 標(biāo)準(zhǔn)和瀏覽器的進(jìn)步,jQuery 的很多精華被原生 JS 吸收,我們直接使用原生 API 就可以用類似手法來處理以前需要 jQuery 的問題。在新的 Web 項(xiàng)目中,如果不需要支持過于陳舊的瀏覽器版本,那么的確沒有必要使用 jQuery。
下面就探討如何用JavaScript(ES6)標(biāo)準(zhǔn)語法,取代jQuery的一些主要功能。
選取元素 選擇器查詢常用的 class、id、屬性 選擇器都可以使用 document.querySelector 或 document.querySelectorAll 替代。
document.querySelector 返回第一個(gè)匹配的 Element
document.querySelectorAll 返回所有匹配的 Element 組成的 NodeList。
jQuery:
var $ele = $("selector");
Native:
let ele = document.querySelectorAll("selector");選擇器模式
選擇器 | 示例 | 示例說明 |
---|---|---|
.class | .intro | 選擇所有class="intro"的元素 |
#id | #firstname | 選擇所有id="firstname"的元素 |
* | * | 選擇所有元素 |
element | p | 選擇所有 元素 |
element,element | div,p | 選擇所有 元素和 元素 |
element element | div p | 選擇 元素內(nèi)的所有 元素 |
element>element | div>p | 選擇所有父級(jí)是 元素的 元素 |
element+element | div+p | 選擇所有緊接著 元素之后的 元素 |
[attribute=value] | a[target=_blank] | 選擇所有使用target="_blank"的元素 |
[attribute^=value] | a[src^="http"] | 選擇每一個(gè)src屬性的值以"http"開頭的元素 |
[attribute$=value] | a[src$=".jpg"] | 選擇每一個(gè)src屬性的值以".jpg"結(jié)尾的元素 |
:first-child | ul li:first-child | 選擇
|
:nth-child(n) | ul li:nth-child(3) | 選擇
|
:last-child | ul li:last-child | 選擇
|
jQuery | Native | 方法說明 |
---|---|---|
$ele.parent() | ele.parentNode | 元素的直接父元素 |
$ele.children() | ele.childNodes | 元素的所有直接子元素 |
$ele.find("a") | ele.querySelectorAll("a") | 元素的后代元素 |
$ele.prev() | ele.previousElementSibling | 元素的上一個(gè)同胞元素 |
$ele.next() | ele.nextElementSibling | 元素的下一個(gè)同胞元素 |
DOM本身就具有很豐富的操作方法,可以取代jQuery提供的操作方法。
內(nèi)容和屬性jQuery | Native | 方法說明 |
---|---|---|
var text = $ele.text() | let text = ele.innerText | 獲取所選元素的文本內(nèi)容 |
$ele.text("text") | ele.innerText = "text" | 設(shè)置所選元素的文本內(nèi)容 |
var html = $ele.html() | let html = ele.innerHTML | 獲取所選元素的HTML內(nèi)容 |
$ele.html(" html ") |
ele.innerHTML = " html " |
設(shè)置所選元素的HTML內(nèi)容 |
var input = $ele.val() | let input = ele.value | 獲取表單字段的值 |
$ele.val("input") | ele.value = "input" | 設(shè)置表單字段的值 |
var href = $ele.attr("href") | let href = ele.getAttribute("href") | 獲取元素的屬性值 |
$ele.attr("href", "/") | ele.setAttribute("href", "/") | 設(shè)置元素的屬性值 |
jQuery | Native | 方法說明 |
---|---|---|
$parent.append($ele) | parent.appendChild(ele) | 在被選元素的結(jié)尾插入內(nèi)容 |
$parent.prepend($ele) | parent.insertBefore(ele, parent.firstChild) | 在被選元素的開頭插入內(nèi)容 |
$ele.after(html) | ele.insertAdjacentHTML("afterend", html) | 在被選元素之后插入內(nèi)容 |
$ele.before(html) | ele.insertAdjacentHTML("beforebegin", html) | 在被選元素之前插入內(nèi)容 |
$ele.remove() | ele.parentNode.removeChild(ele) | 刪除被選元素及其子元素 |
$ele.empty() | ele.innerHTML = null | 從被選元素中刪除子元素 |
$ele.clone() | ele.cloneNode(true) | 拷貝被選元素 |
$ele.replaceWith(html) | ele.outerHTML = html | 指定HTML替換被選元素 |
HTML DOM 允許 JavaScript 改變 HTML 元素的樣式,Native API 提供了如下幾種方式:
ele.setAttribute 直接修改 DOM style 屬性改變樣式
ele.style.cssText 通過 cssText 修改 Style 屬性
ele.style.property 通過 style 對(duì)象讀寫行內(nèi) CSS 樣式
jQuery:
var size = $ele.css("font-size"); // 返回第一個(gè)匹配元素的 CSS 屬性值 $ele.css("font-size", "2rem"); // 為所有元素設(shè)置指定的 CSS 屬性值
Native:
let size = getComputedStyle(ele)["font-size"]; // 獲取當(dāng)前元素計(jì)算后的 CSS 屬性值 ele.style.setProperty("font-size", "2rem"); // 設(shè)置當(dāng)前元素的某個(gè)內(nèi)聯(lián)樣式 ele.style.removeProperty("font-size"); // 移除當(dāng)前元素的某個(gè)內(nèi)聯(lián)樣式設(shè)置 Class
jQuery | Native | 方法說明 |
---|---|---|
$ele.hasClass(className) | ele.classList.contains(className) | 檢查元素是否包含指定的類名 |
$ele.addClass(className) | ele.classList.add(className) | 向元素增加一個(gè)或多個(gè)類名 |
$ele.removeClass(className) | ele.classList.remove(className) | 從元素中移除一個(gè)或多個(gè)類 |
$ele.toggleClass(className) | ele.classList.toggle(className) | 對(duì)元素的一個(gè)或多個(gè)類進(jìn)行切換 |
jQuery:
$ele.on("click", function (evt) { console.log(evt.target); });
Native:
ele.addEventListener("click", evt => { console.log(evt.target); });解除綁定
jQuery:
$ele.off("click");
Native:
ele.removeEventListener("click", func);
如果要移除事件,addEventListener 必須使用外部函數(shù),綁定匿名函數(shù)的事件是無法移除的。
模擬觸發(fā)jQuery:
$ele.trigger("click");
Native:
let event = document.createEvent("MouseEvents"); event.initMouseEvent("click"); ele.dispatchEvent(event);
模擬事件:
首先通過 document.createEvent 方法創(chuàng)建 Event 對(duì)象。
然后利用 Event 對(duì)象的 init 方法對(duì)其進(jìn)行初始化。
最后使用 dispatchEvent 方法觸發(fā) Event 對(duì)象。
詳見:JavaScript 事件——“模擬事件”的注意要點(diǎn)
Ajax jQuery$.ajax({ url: "http://apis.juhe.cn/ip/ip2addr", type: "GET", data: { "key": "80701ec21437ca36ca466af27bb8e8d3", "ip": "220.181.57.216" }, dataType: "json", success: function (data) { console.log(data); } });XHR 封裝
window.ajax = async function (params, callback) { let url = params.url; let method = params.method; let data = params.data; let body = new FormData(); for (let key in data) { if (data.hasOwnProperty(key)) { body.append(key, data[key]); } } let xhr = new XMLHttpRequest(); xhr.timeout = 3000; xhr.open(method, url, true); xhr.addEventListener("readystatechange", evt => { if (xhr.readyState === 4) { if (xhr.status === 200) { callback(xhr.response); } else { throw xhr.statusText; } } }); xhr.send(body); }; ajax({ url: "http://apis.juhe.cn/ip/ip2addr", method: "GET", data: { "key": "80701ec21437ca36ca466af27bb8e8d3", "ip": "220.181.57.216" } },function (resp) { var json = JSON.parse(resp); console.log(json); } )Fetch API
XMLHttpRequest 并不是專為 Ajax 而設(shè)計(jì)的. 雖然各種框架對(duì) XHR 的封裝已經(jīng)足夠好用, 但更好用的 API 是 fetch 。
/* 構(gòu)造請(qǐng)求對(duì)象 */ let request = new Request( "http://apis.juhe.cn/ip/ip2addr", { method: "GET", body: { "key": "80701ec21437ca36ca466af27bb8e8d3", "ip": "220.181.57.216" }, headers: new Headers() } ); /* 處理響應(yīng)對(duì)象 */ fetch(request) .then(response => response.json()) .then(function (data) { console.log(data); }) .catch(function (error) { console.log(error); });
詳見:fetch用法說明
工具 ArrayjQuery | Native | 方法說明 |
---|---|---|
$.isArray(array) | Array.isArray(array) | 判斷參數(shù)是否為一個(gè)數(shù)組 |
$.inArray(item, array) | array.includes(item) | 判斷值是否在指定數(shù)組中 |
$.makeArray(objlist) | Array.from(objlist) | 將類數(shù)組對(duì)象轉(zhuǎn)換為數(shù)組 |
$.merge(array1, array2) | array1.concat(array2) | 合并兩個(gè)數(shù)組(有區(qū)別) |
$.each(array, function (i, item) {} | array.forEach((item, i) => {}) | 遍歷指定的對(duì)象和數(shù)組 |
合并數(shù)組時(shí),merge 會(huì)改變?cè)瓟?shù)組的內(nèi)容,而 concat 不會(huì)修改原數(shù)組,只會(huì)返回合并后的數(shù)組
MethodjQuery | Native | 方法說明 |
---|---|---|
$.now() | Date.now() | 返回當(dāng)前時(shí)間戳 |
$.trim(context) | context.trim() | 移除字符串頭尾空白 |
$.type(parameter) | typeof parameter | 檢測(cè)參數(shù)的內(nèi)部類型 |
$.parseJSON(jsonstr) | JSON.parse(jsonstr) | 將JSON轉(zhuǎn)換為JS對(duì)象 |
$ele.data("key", "value") | ele.dataset.key = "value" | 在指定的元素上存儲(chǔ)數(shù)據(jù) |
$.map(array, function (item, i) {}) | array.map((item, i) => {}) | 將數(shù)組轉(zhuǎn)化為處理后的新數(shù)組 |
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/98094.html
摘要:數(shù)據(jù)來源百度統(tǒng)計(jì)下面是國際上占有率,已經(jīng)跌出前,比較多,還好支持他們并不難。 前端發(fā)展很快,現(xiàn)代瀏覽器原生 API 已經(jīng)足夠好用。我們并不需要為了操作 DOM、Event 等再學(xué)習(xí)一下 jQuery 的 API。同時(shí)由于 React、Angular、Vue 等框架的流行,直接操作 DOM 不再是好的模式,jQuery 使用場(chǎng)景大大減少。因此我們項(xiàng)目組在雙十一后抽了一周時(shí)間,把所有代碼中...
摘要:就像一個(gè)大的功能庫,給我們返回一個(gè)有很多方法屬性的對(duì)象,然后我們調(diào)用它的方法屬性就行了。和一樣,使用鏈?zhǔn)酱a。一旦找到新的元素,之后的鏈就操作在新元素上,而不是一開始的元素。一般的變量無法使用方法,使用封裝,使其可以使用方法。 jQuery jQuery就像一個(gè)大的功能庫,給我們返回一個(gè)有很多方法、屬性的對(duì)象,然后我們調(diào)用它的方法、屬性就行了。 和Javascript一樣,使用鏈?zhǔn)酱a...
摘要:本項(xiàng)目總結(jié)了大部分替代的方法,暫時(shí)只支持以上瀏覽器。返回指定元素及其后代的文本內(nèi)容。從服務(wù)器讀取數(shù)據(jù)并替換匹配元素的內(nèi)容。用它自己的方式處理,原生遵循標(biāo)準(zhǔn)實(shí)現(xiàn)了最小來處理。當(dāng)全部被解決時(shí)返回,當(dāng)任一被拒絕時(shí)拒絕。是創(chuàng)建的一種方式。 原文https://github.com/nefe/You-D... You Dont Need jQuery showImg(https://segmen...
摘要:語法為回調(diào)函數(shù)擁有兩個(gè)參數(shù)第一個(gè)為對(duì)象的成員或數(shù)組的索引,第二個(gè)為對(duì)應(yīng)變量或內(nèi)容。但是對(duì)于的函數(shù),如果需要退出循環(huán)可使回調(diào)函數(shù)返回,其它返回值將被忽略。 JavaScript 專題系列第十一篇,講解 jQuery 通用遍歷方法 each 的實(shí)現(xiàn) each介紹 jQuery 的 each 方法,作為一個(gè)通用遍歷方法,可用于遍歷對(duì)象和數(shù)組。 語法為: jQuery.each(object,...
摘要:拷貝克隆節(jié)點(diǎn)是的常見操作,提供一個(gè)方法,專門用于處理的克隆方法深度復(fù)制所有匹配的元素集合,包括所有匹配元素匹配元素的下級(jí)元素文字節(jié)點(diǎn)。 拷貝clone() 克隆節(jié)點(diǎn)是DOM的常見操作,jQuery提供一個(gè)clone方法,專門用于處理dom的克隆 .clone()方法深度復(fù)制所有匹配的元素集合,包括所有匹配元素、匹配元素的下級(jí)元素、文字節(jié)點(diǎn)。 clone方法比較簡(jiǎn)單就是克隆節(jié)點(diǎn),但是需...
閱讀 2233·2021-09-02 15:11
閱讀 1565·2019-08-30 15:43
閱讀 2100·2019-08-29 13:48
閱讀 2820·2019-08-26 13:55
閱讀 2126·2019-08-23 15:09
閱讀 2924·2019-08-23 14:40
閱讀 3458·2019-08-23 14:23
閱讀 2666·2019-08-23 14:20