儘可能的使用原生js而不是jQuery
不可否認,jQuery是一款非常優秀的JavaScript庫,極大的提高了前端開發效率。
有利就有弊,過度的依賴jQuery可能會帶來程式碼執行效率低等問題;隨著原生JavaScript版本的升級,現在很多內建的功能也能夠完美的實現jQuery的對應功能,下面就簡單做一下羅列,需要的朋友可以做一下參考。
一.元素查詢:
(1).通過id查詢元素:
[JavaScript] 純文字檢視 複製程式碼$("#ant")
jQuery的id選擇器完全可以使用原生方法替代:
[JavaScript] 純文字檢視 複製程式碼document.getElementById("ant")
(2).通過class屬性來查詢元素:
[JavaScript] 純文字檢視 複製程式碼$(".ant")
document.querySelector()和document.querySelectorAll()方法:
這兩個方法可以實現強大的選擇器功能,下面是幾個簡單程式碼:
[JavaScript] 純文字檢視 複製程式碼//獲取id屬性值為ant的元素物件 document.querySelector("#ant"); //獲取id屬性值為ant下面的所有div元素集合 document.querySelectorAll("#ant div");
二.判斷節點是否存在:
[JavaScript] 純文字檢視 複製程式碼$("#ant").length > 0
上面的程式碼可以使用下面的程式碼替代:
[JavaScript] 純文字檢視 複製程式碼document.getElementById("ant") !== null
三.節點遍歷:
[JavaScript] 純文字檢視 複製程式碼("div").each(function (index, elem) { //code })
上面的程式碼可以採用下面的程式碼替代:
[JavaScript] 純文字檢視 複製程式碼function forEach(elems, callback) { if([].forEach) { [].forEach.call(elems, callback); } else { for (var index = 0; index < elems.length; index++) { callback(elems[index], index); } } } var div = document.querySelectorAll("div"); forEach(div, function(elem, index){ //code });
四.清空節點內容:
[JavaScript] 純文字檢視 複製程式碼$("#ant").empty()
上面的程式碼可以用如下程式碼替代:
[JavaScript] 純文字檢視 複製程式碼document.getElementById('test').innerHTML =""
五.設定節點的內容:
[JavaScript] 純文字檢視 複製程式碼$("div").html("螞蟻部落")
上面的程式碼可以使用如下程式碼替代:
[JavaScript] 純文字檢視 複製程式碼document.querySelecotr('div').innerHTML = "螞蟻部落";
再來看設定text文字內容:
[JavaScript] 純文字檢視 複製程式碼$("div").text("螞蟻部落")
可以使用如下程式碼替代:
[JavaScript] 純文字檢視 複製程式碼var odiv = document.querySelector("div"); odiv.textContent="螞蟻部落";
六.操作class屬性:
(1).新增class樣式類:
[JavaScript] 純文字檢視 複製程式碼$("#ant").addClass("class")
上面的程式碼可以用以下程式碼替代:
[JavaScript] 純文字檢視 複製程式碼function addClass(elem, className) { if(elem.classList) { elem.classList.add(className); } else { elem.className += ' ' + className; } } addClass(document.getElementById("ant"), "class");
(2).刪除指定樣式類:
[JavaScript] 純文字檢視 複製程式碼$("#ant").removeClass("class");
上面的程式碼可以使用如下程式碼替代:
[JavaScript] 純文字檢視 複製程式碼function removeClass(elem, className) { if(elem.classList) { elem.classList.remove(className); } else { elem.className=elem.className.replace(new RegExp('(^|\\b)'+className.split(' ').join('|')+'(\\b|$)','gi'),' '); } } removeClass(document.getElementById("ant"), "class");
(3).判斷是否包含指定的類:
[JavaScript] 純文字檢視 複製程式碼$("#ant").hasClass("class");
上面的程式碼可以用以下程式碼替代:
[JavaScript] 純文字檢視 複製程式碼function hasClass(elem, className) { if(elem.classList) { return elem.classList.contains(className); } else { return new RegExp('(^| )' + className + '( |$)', 'gi').test(elem.className); } } hasClass(document.getElementById("ant"), "class");
七.節點操作:
(1).建立節點:
[JavaScript] 純文字檢視 複製程式碼$("<div>")
上面的程式碼可以用以下程式碼替代:
[JavaScript] 純文字檢視 複製程式碼document.createElement("div")
(2).複製節點:
[JavaScript] 純文字檢視 複製程式碼$("div").clone()
上面的程式碼可以用以下程式碼替代:
[JavaScript] 純文字檢視 複製程式碼document.querySelector("div").cloneNode(true)
(3).插入節點:
[JavaScript] 純文字檢視 複製程式碼$("div").append("<span></span>")
當然插入節點的方法有很多,以上程式碼可以用如下程式碼替代:
[JavaScript] 純文字檢視 複製程式碼var span = document.createElement("span"); document.querySelector("div").appendChild(span);
在指定節點之前插入新的子節點:
[JavaScript] 純文字檢視 複製程式碼$("<span>").insertBefore("#ant");
上面的程式碼可以用如下程式碼替代:
[JavaScript] 純文字檢視 複製程式碼var t = document.getElementById("ant"); var span = document.createElement("span"); t.parentNode.insertBefore(span, t);
在指定節點後插入新的子節點:
[JavaScript] 純文字檢視 複製程式碼$("<span>").insertAfter("#ant")
以上程式碼可以用下面的程式碼替代:
[JavaScript] 純文字檢視 複製程式碼function insertAfter(elem, newNode){ if(elem.nextElementSibling) { elem.parentNode.insertBefore(newNode, elem.nextElementSibling); } else { elem.parentNode.appendChild(newNode); } } var t = document.getElementById("ant"); var span = document.createElement("span"); insertAfter(t, span);
(4).獲取父節點:
[JavaScript] 純文字檢視 複製程式碼$("#ant").parent()
上面的程式碼可以用以下程式碼替代:
[JavaScript] 純文字檢視 複製程式碼document.getElementById("ant").parentNode
相關文章
- 儘可能的使用原生js,而不是jQueryJSjQuery
- 放棄jQuery, 使用原生jsjQueryJS
- js陣列去重,除重的方式(儘可能多)JS陣列
- js原生dom物件和jQuery物件可以混合使用嗎?JS物件jQuery
- 使用Django而不是FastAPI的10個理由DjangoASTAPI
- 故障自愈是不是應該儘可能讓資料庫自己來做資料庫
- 使用原生javascript實現jquery的$(function(){ })JavaScriptjQueryFunction
- 關注已經存在的人工智慧,而不是未來可能存在的人工智慧
- 原生JS和jQuery分別使用jsonp來獲取“當前天氣資訊”jQueryJSON
- Ajax 跨域難題 - 原生 JS 和 jQuery 的實現對比跨域JSjQuery
- 讓pip使用python3而不是python2Python
- 為什麼DNS使用UDP而不是TCP詳解!DNSUDPTCP
- Shopify使用Memcached而不是Redis快取提升20%效能Redis快取
- jquery取值和賦值(包含部分是原生js的取值和賦值)jQuery賦值JS
- 儘可能地恢復織夢CMS的資料庫資料庫
- 為何Symless選擇Rust,而不是Go、C++或Node.js?RustGoC++Node.js
- 始終使用屬性(Property),而不是欄位(Data Member)
- 地圖熱點 jquery.image-maps.js 的使用地圖jQueryJS
- js_原生js獲取當前的使用者ipJS
- 一份儘可能全面的Go channel介紹Go
- 為什麼執行緒安全的List推薦使用CopyOnWriteArrayList,而不是Vector執行緒
- 選擇Apache Pulsar而不是Kafka的理由 - KafkaesqueApacheKafka
- JWT不是為了授權而設計的JWT
- ERP改變的是思想而不是習慣!
- 詳解MVCC以及儘可能解決幻讀的兩種方案MVC
- gRPC為什麼使用截止時間而不是超時時間?RPC
- 使用 XML 時儘量避免使用的技術XML
- electron 使用 Node.js 原生模組Node.js
- 選擇 Pulsar 而不是 Kafka 的 7 大理由Kafka
- JS端基於download.js實現圖片、視訊時直接下載而不是開啟預覽JS
- 我什麼時候應該使用TreeMap 而不是 PriorityQueue?反之亦然?
- 儘量使用 useReducer,不要使用 useStateuseReducer
- 頭腦風暴問題而不是想法
- Go是Google的語言,而不是我們的語言Go
- 遊戲防沉迷,防的是沉迷,而不是遊戲遊戲
- 提高JS原生方法效能的JS庫 -- loadashJS
- 原生js的常用方法整理JS
- jQuery的基本使用jQuery