JavaScript DOM操作提高篇
做為一個web前端,處理和了解瀏覽器差異一個重要問題.以下將介紹本人在工作中的一些筆記總結,先介紹沒有使用js庫的情況。
1. setAttribute方法設定元素類別名稱: 在jQuery中,直接使用attr()方法即可,可在原生的JS中
element.setAttribute(class,newClassName) //這個是W3C的標準,在相容W3C標準的瀏覽器中有效,可是,IE才是國內用戶的主旋律
element.setAttribute(className,newClassName) //這樣的設定在IE中才能有效
element.className = newClassName //所有瀏覽器有效(只要支援javascript)
好了,開篇說完了,這篇文章的目的也就是介紹瀏覽器差異的同時使前端的朋友們了解如果用最有效的方法去解決問題,下面繼續。
2. FireFox沒有window.event對象,只有event對象,IE裡只支持window.event,而其他主流瀏覽器兩者都支持,所以一般寫成:
function handle(e)
{
e = e || event;
...
}
3. DOMContentLoaded事件原理:對window.onload事件是當頁面解析/DOM樹建立完成,並完成瞭如圖片、腳本、樣式表等所有資源的下載後才觸發的。這對於很多實際的應用程式而言有點太「遲」了,比較影響使用者體驗。為了解決這個問題,FF中便增加了一個DOMContentLoaded方法,與onload相比,該方法觸發的時間更早,它是在頁面的DOM內容加載完成後即觸發,而無需等待其他資源的加載(這個也就是jquery.ready()事件的實作原理)。
//以下是jQuery 1.4.2版本的原始分析
bindReady: function() {
if ( readyBound ) {
〜 return; // Catch cases where $(document).ready () is called after the
// browser event has already occurred.
if ( document.readyState === "complete" ) {
『 era and webkit nightlies currently support this event
if ( document.addEventListener ) {
// Use the handy event callback
document.addadListener( "DOMContentLoaded" document.addetListener( "DOMContentLoaded" 〕 〕〜》 window.onload, that will always work
window.addEventListener ( "load", jQuery.ready, false );
// If IE event model is used
} else if ( document.attachEvent ) { // maybe late but safe also for iframes
docQuument.attachEvent("onreadystatechange", DOMContentLoaded);
// A fallback to window.onload, that will always work
window. and not a frame
/ / continually check to see if the document is ready
var toplevel = false;
try {
〕 try {🀝 腳 atch(e) {}
if ( document.documentElement.doScroll && toplevel ) {
doScrollCheck();
}
}
}
設計思路- 將Webkit與Firefox同等對待,都是直接註冊才存在的兼容性。對於IE,先註冊document的onreadystatechange事件,經過測試,該方式與window.onload相當,依然會等到所有資源下載完畢後才觸發。之後,判斷如果是IE且頁面不在iframe當中,則透過setTiemout來不斷的呼叫documentElement的doScroll方法,直到呼叫成功則出觸發DOMContentLoaded。 1 jQuery對於IE的解決方案的原理是,在IE下,DOM的某些方法只有在DOM解析完成後才可以調用,doScroll就是這樣一個方法,反過來當能調用doScroll的時候即是DOM解析完成之時,與prototype中的document.write相比,此方案可以解決頁面有iframe時失效的問題。此外,jQuery似乎擔心當頁面處於iframe中時,該方法會失效,因此實現程式碼中做了判斷,如果是在iframe中則透過document的onreadystatechange來實現,否則透過doScroll來實現。不過經過測試,即使在iframe中,doScroll依然有效。
4. 學會使用IE的條件註釋。許多前端總是在抱怨萬惡的IE,確實,處理兼容性的問題確實會越來越噁心,可是沒有辦法,既然沒有辦法改變,那麼請享受...
今天就先總結到這裡吧,下週收假回來有時間發高級AJAX篇,希望能對新手或有需要的人有所幫助.由於文筆有限,寫的不好也請見諒,這個剛開始寫博客,成長階段嘛。哈哈...

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

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

Python和JavaScript在開發環境上的選擇都很重要。 1)Python的開發環境包括PyCharm、JupyterNotebook和Anaconda,適合數據科學和快速原型開發。 2)JavaScript的開發環境包括Node.js、VSCode和Webpack,適用於前端和後端開發。根據項目需求選擇合適的工具可以提高開發效率和項目成功率。
