91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript DOM操作的基本原則

發布時間:2021-09-08 17:43:49 來源:億速云 閱讀:106 作者:chen 欄目:web開發

本篇內容介紹了“JavaScript DOM操作的基本原則”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

JavaScript DOM操作基本原則

在Web開發中,JavaScript的一個很重要的作用就是對DOM進行操作,我們都知道,JavaScript DOM操作的效率是很低的,而且不是一般的慢,而且這也是引發性能問題的常見問題之一。為什么會慢呢?因為對DOM的修改為影響網頁的用戶界面,重繪頁面是一項昂貴的操作。太多的JavaScript DOM操作會導致一系列的重繪操作,為了確保執行結果的準確性,所有的修改操作是按順序同步執行的。我們稱這個過程叫做回流(reflow),同時這也是最昂貴的瀏覽器操作之一。回流操作主要會發生在幾種情況下:

◆當對DOM節點執行新增或者刪除操作時。

◆動態設置一個樣式時(比如element.style.width="10px")。

◆當獲取一個必須經過計算的尺寸值時,比如訪問offsetWidth、clientHeight或者其他需要經過計算的CSS值(在兼容DOM的瀏覽器中,可以通過getComputedStyle函數獲取;在IE中,可以通過currentStyle屬性獲取)。

解決問題的關鍵,就是限制通過JavaScript DOM操作所引發回流的次數。大部分瀏覽器都不會在JavaScript的執行過程中更新DOM。相應的,這些瀏覽器將對對DOM的操作放進一個隊列,并在JavaScript腳本執行完畢以后按順序一次執行完畢。也就是說,在JavaScript執行的過程中,用戶不能和瀏覽器進行互動,直到一個回流操作被執行。(失控腳本對話框會觸發回流操作,因為他執行了一個中止JavaScript執行的操作,此時會對用戶界面進行更新)

如果要減少由于DOM修改帶來的回流操作,有兩個基本的方法。***個就是在對當前DOM進行操作之前,盡可能多的做一些準備工作。一個經典的例子就是向document對象中添加很多DOM節點:

for(vari=0;i<items.length;i++){  varitem=document.createElement("li");  item.appendChild(document.createTextNode("Option"+i);  list.appendChild(item);  }

這段代碼的效率是很低的,因為他在每次循環中都會修改當前DOM結構。為了提高性能,我們需要將這個次數降到***,對于這個案例來說,***的辦法是建立一個文檔碎片(documentfragment),作為那些已創建元素元素的臨時容器,***一次將容器的內容直接添加到父節點中:

varfragment=document.createDocumentFragment();  for(vari=0;i<items.length;i++){  varitem=document.createElement("li");  item.appendChild(document.createTextNode("Option"+i);  fragment.appendChild(item);  }  list.appendChild(fragment);

經過調整的代碼,只會修改一次當前DOM的結構,就在***一行,而在這之前,我們用文檔碎片來保存那些中間結果。因為文檔碎片沒有任何可見內容,所以這類修改不會觸發回流操作。實際上,文檔碎片也不能被添加到DOM中,我們需要將它作為參數傳給appendChild函數,而實際上添加的不是文檔碎片本身,而是它下面的所有子元素。
避免不必要回流操作的另外一種方法,就是在對JavaScript DOM操作之前,把要操作的元素,先從當前DOM結構中刪除。對于刪除一個元素,基本有兩種方法:

◆通過removeChild()或者replaceChild()實現真正意義上的刪除。

◆設置該元素的display樣式為“none”。

而一旦修改操作完成,上面這個過程就需要反轉過來,將刪除的元素重新添加到當前的DOM結構中,我們還是拿上面的例子來做說明:

list.style.display="none";  for(vari=0;i<items.length;i++){  varitem=document.createElement("li");  item.appendChild(document.createTextNode("Option"+i);  list.appendChild(item);  }  list.style.display="";

將list的display樣式設置為“none”后,就將這個元素從當前的DOM結構中刪除了,因為這個節點不再可視。在將display屬性設置回之前的默認值之前,向其下添加子元素是不會觸發回流操作的。

另外一個經常引起回流操作的情況是通過style屬性對元素的外觀進行修改。比如下面這個例子:

element.style.backgroundColor="blue";  element.style.color="red";  element.style.fontSize="12em";

“JavaScript DOM操作的基本原則”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

绥宁县| 平阳县| 灵寿县| 崇信县| 西乌珠穆沁旗| 华池县| 惠州市| 东方市| 建湖县| 轮台县| 富民县| 招远市| 搜索| 德庆县| 丘北县| 靖安县| 韩城市| 南召县| 申扎县| 榆树市| 政和县| 峨眉山市| 菏泽市| 简阳市| 清徐县| 临安市| 莱芜市| 始兴县| 舞阳县| 竹山县| 上林县| 嘉祥县| 喀喇沁旗| 津南区| 文昌市| 八宿县| 新乡县| 大城县| 阳曲县| 罗山县| 武威市|