jQuery方法的本機JavaScript等效物:DOM和形式
核心要點
- jQuery 對於需要支持舊版 Internet Explorer 或編寫類似 jQuery 的庫所需時間比開發應用程序時間更長的開發者來說是一個有用的工具。但是,對於大多數其他情況,使用原生 JavaScript 效率更高,因為它無需加載像 jQuery 這樣的大型庫。
- 常用 jQuery 方法(例如 DOM 選擇器和 DOM 操作)的原生 JavaScript 等效項通常比其 jQuery 對應項執行得更快、更有效。例如,使用
document.getElementsByClassName
或document.getElementById
可能比使用 jQuery 的$()
包裝器快得多。 - HTML5 提供對各種常用輸入類型的內置支持,無需為表單驗證添加額外的 JavaScript 或 jQuery 代碼。不支持這些新類型的舊瀏覽器將恢復為標准文本輸入字段,需要服務器端驗證。
關於我最近的《你真的需要 jQuery 嗎? 》一文,爭論仍在繼續,但總而言之,使用jQuery 有兩個原因:1. 你需要支持IE6/7/8(記住你無法遷移到jQuery 2.0),或者2. 沒有jQuery,你將花費比開發應用程序更長的時間來編寫類似jQuery 的庫。
對於其他所有情況,請務實。 jQuery 是一個 270KB 的通用庫。你不太可能需要它提供的所有功能,即使你省略某些模塊,它仍然是一大塊代碼。你可能從 CDN 加載 30KB 的縮小版本,但瀏覽器必須在執行任何其他操作之前停止處理並在每一頁上解析代碼。這是一系列文章中的第一篇,展示常用 jQuery 方法的原生 JavaScript 等效項。雖然你可能希望將其中一些包裝在更短的類似別名的函數中,但你肯定不需要創建自己的類似 jQuery 的庫。
DOM 選擇器
jQuery 允許使用 CSS 選擇器語法進行 DOM 節點選擇,例如:
// 在 ID 为“first”的文章中查找所有具有类“summary”的段落 var n = $("article#first p.summary");
原生等效項:
var n = document.querySelectorAll("article#first p.summary");
document.querySelectorAll
在所有現代瀏覽器和 IE8 中都已實現(儘管這僅支持 CSS2.1 選擇器)。 jQuery 對更高級的選擇器提供了額外的支持,但大多數情況下,它會在 $()
包裝器內運行 document.querySelectorAll
。原生 JavaScript 還提供了四種替代方案,如果您可以使用它們,它們幾乎肯定比 querySelectorAll
更快:
document.querySelector(selector)
— 只獲取第一個匹配的節點document.getElementById(idname)
— 按其 ID 名稱獲取單個節點document.getElementsByTagName(tagname)
— 獲取與元素匹配的節點(例如 h1、p、strong 等)。document.getElementsByClassName(class)
— 獲取具有特定類名的節點
getElementsByTagName
和 getElementsByClassName
方法也可以應用於單個節點以將結果限制為僅後代,例如:
// 在 ID 为“first”的文章中查找所有具有类“summary”的段落 var n = $("article#first p.summary");
讓我們進行一些測試。我編寫了一些小的腳本,以從我的《你真的需要 jQuery 嗎? 》文章中檢索所有註釋節點 10,000 次。結果:
代码 | 时间 |
---|---|
// jQuery 2.0<br>var c = $("#comments .comment"); |
4,649 ms |
// jQuery 2.0<br>var c = $(".comment"); |
3,437 ms |
// 原生 querySelectorAll<br>var c = document.querySelectorAll("#comments .comment"); |
1,362 ms |
// 原生 querySelectorAll<br>var c = document.querySelectorAll(".comment"); |
1,168 ms |
// 原生 getElementById / getElementsByClassName<br>var n = document.getElementById("comments");<br>var c = n.getElementsByClassName("comment"); |
107 ms |
// 原生 getElementsByClassName<br>var c = document.getElementsByClassName("comment"); |
75 ms |
我不能聲稱嚴格的實驗室條件,它也不反映現實世界的使用情況,但在這種情況下,原生 JavaScript 的速度提高了 60 倍。它還說明,按 ID、標籤或類獲取節點通常優於 querySelectorAll
。
DOM 操作
jQuery 提供了幾種方法來向 DOM 添加更多內容,例如:
// 在 ID 为“first”的文章中查找所有具有类“summary”的段落 var n = $("article#first p.summary");
在表面之下,jQuery 使用原生 innerHTML
方法,例如:
var n = document.querySelectorAll("article#first p.summary");
你也可以使用 DOM 構建技術。這些更安全,但很少比 innerHTML
快:
var n = document.getElementById("first"); var p = n.getElementsByTagName("p");
我們還可以刪除 jQuery 中的所有子節點:
$("#container").append("<p>more content</p>");
使用 innerHTML
的原生等效項:
document.getElementById("container").innerHTML += "<p>more content</p>";
或一個小函數:
var p = document.createElement("p"); p.appendChild(document.createTextNode("more content")); document.getElementById("container").appendChild(p);
最後,我們可以在 jQuery 中從 DOM 中刪除整個元素:
$("#container").empty();
或原生 JavaScript:
document.getElementById("container").innerHTML = null;
可縮放矢量圖形 (SVG)
核心 jQuery 庫已開髮用於處理當前文檔。 SVG 也具有 DOM,但 jQuery 不提供對這些對象的直接操作,因為它通常需要使用諸如 createElementNS
和 getAttributeNS
之類的方法。它可以工作,並且有幾個插件可用,但自己編寫代碼或使用專門的 SVG 庫(如 Raphaël 或 svg.js)效率更高。
HTML5 表單
即使是最基本的 Web 應用程序也都會有一兩個表單。你應該始終在服務器端驗證用戶數據,但理想情況下,你將使用客戶端驗證來補充它,以便在提交表單之前捕獲錯誤。客戶端驗證很簡單:1. 表單提交時運行一個函數。 2. 如果遇到任何問題,則停止提交並顯示錯誤。
你可以使用 jQuery。你可以使用原生 JavaScript。你應該選擇哪個? 兩者都不選。 HTML5 內置支持各種常用輸入類型,例如電子郵件、電話、URL、數字、時間、日期、顏色和基於正則表達式的自定義字段。例如,如果你想強制用戶輸入電子郵件地址,請使用:
var c = document.getElementById("container"); while (c.lastChild) c.removeChild(c.lastChild);
除非你需要更多複雜的功能(例如比較兩個或多個字段或顯示自定義錯誤消息),否則無需額外的 JavaScript 或 jQuery 代碼。舊版瀏覽器(包括 IE9 及以下版本)不理解新類型,並將恢復為標准文本輸入字段。這些用戶將回退到服務器端驗證;這並不是一個很好的體驗,但你可以應用一個 shim 或希望這些人看到光明併升級。在我的下一篇文章中,我們將研究原生的 CSS 類操作和動畫。
關於 jQuery 和原生 JavaScript 的常見問題
(此處省略了FAQ部分,因為該部分內容與圖片和文章主體關聯性較弱,且篇幅較長,可以單獨處理。)
以上是jQuery方法的本機JavaScript等效物:DOM和形式的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

實現視差滾動和元素動畫效果的探討本文將探討如何實現類似資生堂官網(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

探索前端中類似VSCode的面板拖拽調整功能的實現在前端開發中,如何實現類似於VSCode...
