JavaScript的DOM編程總結

DOM(文檔對象模型), 與語言無關, 用于操作XML(在Web中)和HTML(在瀏覽器在)文檔的應用程序接口。訪問DOM次數越多, 速度越慢, 費用也就越高。

最小化DOM訪問次數,盡可能在JavaScript端處理。

如果需要多次訪問某個DOM節點,請使用局部變量存儲它的作用。

小心處理html集合,因為它實時系著底層文檔。把集合的長度緩存到一個變量中,并在迭代中使用它。如果需要經常操作集合,建議把他拷貝到一個數組中。

如果可能,請使用速度更快的API,比如querySelectorAll()和firstElementChild()。

重排: 當DOM的變化影響了元素的幾何屬性(高和寬),比如改變邊框寬度或給段落增加文字,導致行數增加,瀏覽器需要重新計算元素的幾何屬性,同樣其他元素的幾何屬性和位置也會因此受到影響。瀏覽器會使渲染樹中受到影響的部分失效,并重新構造渲染樹。這個過程稱為'重排'。

重繪: 完成重排后,瀏覽器會重新繪制受影響的部分到屏幕中,這個過程稱為'重繪'。

要留意重繪和重排;批量修改樣式時,'離線'操作DOM樹,使用緩存,并減少訪問布局信息的次數。

動畫中使用絕對定位,使用拖放代理。

使用事件委托來減少事件處理器的數量。

innerHTML屬性: ducument.getElementById('here').innerHTML()

保準的DOM方法: ducument.createElement()、?ducument。createTextNode()

節點克隆: ducument.cloneNode()

獲取集合:?ducument.getElementByName()

     ?ducument.getElementByClassName()

     ?ducument.getElementByTagName()

這個集合對象是一個類似數組的列表, 沒有數組的push和slice方法, 但提供數組中的length屬性,訪問集合元素時使用局部變量

頁面中的所有img元素:?ducument.images

頁面中所有a元素:?ducument.links

頁面中所有表單元素:?ducument.forms

頁面中第一個表單的所有字段:?ducument.forms[0].elements

獲取第一個元素:?ducument.getElementById('div').firstChild

獲取相鄰元素:?ducument.getElementById('div').firstChild.nextSibling

獲取元素集合:?ducument.getElementById('div').childNodes

API只返回元素節點: child 代替 childNodes

          childElementCount?代替 childNodes.length

         ? ?firstElementChild?代替 firstChild

          lastElementChild?代替 lastChild

          nextElementChild?代替 nextSibling

          previousElementSibling?代替?previousSibling

選擇器API:?ducument.querySelectorAll('#menu a') <=>?ducument.getElementById('menu').getElementByTagName('a')

class為warning和notice的元素:?ducument.querySelectorAll('div.warning, div.notice')

            ? <=> ?var errs=[];

               ? divs = doucument.getElementsByTagName('div');

               ? className = ''?;

               ? for(var i=0; len = divs.length; i<len; i++) {

                 ?className = divs[i].className;

                 ?if (className == 'notice' || className == 'warning') {

                  errs.push(divs[i]);

                 ?}

               ?}

緩存布局信息: current++   

       ?mgElement.style.left = current + 'px';

       ?myElement.style.top = current + 'px';

       ?if (current >=500) {

         stopAnimation();       

       ?}

? ? ? ? ? ? ? ? ? ? ? ??

轉載于:https://www.cnblogs.com/floraCnblogs/p/DOM.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396877.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396877.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396877.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

2017.1.20活動

1、根據教程用傾斜開關控制了一個小燈的亮滅&#xff08;傾斜到達一定角度亮或到達一定角度滅&#xff09;&#xff0c;后自己嘗試了利用傾斜開關控制兩個小燈&#xff0c;即一開始綠燈亮紅燈滅&#xff0c;到達一定角度后&#xff0c;綠燈亮起紅燈滅掉&#xff0c;附代碼&…

oracle 增加間隔分區,oracle分區表之間隔分區(oracle 11g) - 漫兮網

范圍分區允許用戶根據分區鍵列值的范圍創建分區。下面是一個按范圍分區表的示例&#xff1a;create table sales6(sales_id number,sales_dt date)partition by range (sales_dt)(partition p0701 values less than (to_date(2007-02-01,yyyy-mm-dd)),partition p0702 values l…

c++ try catch語句_再問你一遍,你真的了解try..catch(finally)嗎???

定義首先來看下 MDN 的定義&#xff1a;The try...catch statement marks a block of statements to try and specifies a response should an exception be thrown.try...catch語句標記要執行的語句&#xff0c;并指定一個當有異常拋出時候的響應簡短的一句的確描述了try...ca…

lamp架構,搭建一個網絡平臺

首先更改主機名和 hosts 安裝軟件包&#xff0c;設置啟動服務 設置數據庫密碼 上傳discuz論壇包 將discuz注冊的用戶名寫在mariadb數據庫中 解壓discuz包 unzip discuz包 -d /var/www/html cd到upload下 cp -rf * /var/www/html 進入數據庫 mysql -uroot -p create database…

MyEclipse中SVN的使用方法

1、 加載插件 svn-myeclipse插件site-1.10.2.zip&#xff0c;解壓縮后&#xff0c;將文件夾下的所有文件拷貝到MyEclipse安裝包下的MyEclipse 8.5\dropins文件夾下&#xff0c;然后重新打開myeclipse&#xff0c;會彈出一個報錯窗口&#xff0c;不要管它&#xff0c;關閉后&…

oracle數據泵導出csv文件,數據泵expdp導出遇到ORA-01555和ORA-22924問題的分析和處理...

使用數據泵導出數據庫數據時&#xff0c;發現如下錯誤提示&#xff1a;ORA-31693: Table data object "CAMS_CORE"."BP_EXCEPTION_LOG" failed to load/unload and is being skipped due to error:ORA-02354: error in exporting/importing dataORA-01555:…

Go程序開發---Go環境配置:CentOS6.5+Go1.8標準包安裝

1.Go安裝 1.1Go的三種安裝方式 Go有多種安裝方式&#xff0c;可以選擇自己習慣的方式進行&#xff0c;這里介紹三種安裝方式&#xff1a; 1&#xff09;Go源碼安裝 2&#xff09;Go標準包安裝 3&#xff09;第三方工具安裝 這里主要介紹下Go標準包在CentOS6.5系統中的安裝方式 …

python矩陣乘法_魚書——第一章 Python入門

one 第一章1.1 Python是什么Python是一個簡單、易讀、易記的編程語言&#xff0c;而且是開源的&#xff0c;可以免費地自由使用。Python可以用類似英語的語法編寫程序&#xff0c;編譯起來也不費力&#xff0c;因此我們可以很輕松地使用Python。特別是對首次接觸編程的人士來說…

深入淺出面向對象分析與設計

深入淺出面向對象分析與設計書籍 下載位置&#xff1a;http://pan.baidu.com/s/1o7gmmuu轉載于:https://www.cnblogs.com/wlming/p/5160140.html

[SHOI2002]百事世界杯之旅

題目&#xff1a;“……在2002年6月之前購買的百事任何飲料的瓶蓋上都會有一個百事球星的名字。只要湊齊所有百事球星的名字&#xff0c;就可參加百事世界杯之旅的抽獎活動&#xff0c;獲得球星背包&#xff0c;隨聲聽&#xff0c;更克赴日韓觀看世界杯。還不趕快行動&#xff…

Oracle adviser,Oracle10g SQL tune adviser

Oracle10g SQL tune adviser簡單介紹本文簡單介紹下SQL Tuning Adviser的配置使用方法和一些相關知識點&#xff0c;如果了解SQL Tuning Adviser詳細信息&#xff0c;參看Oracle聯機文檔。本文對分析結果沒有詳細分析。一、自動SQL Tuning簡單介紹&#xff1a;1、優化模式&…

考托福

todo 香港的博士 轉載于:https://www.cnblogs.com/dunfentiao/p/5164028.html

keepalived vip ping不通_【干貨分享】OpenStack LVS負載均衡為什么不通?

背景介紹OpenStack環境Neutron 的安全組會向虛擬機默認添加 anti-spoof 的規則&#xff0c;將保證虛擬機只能發出&#xff0f;接收以本機Port為原地址或目的地址(IP、MAC)的流量&#xff0c;提高了云的安全性。但是LVS等需要綁定VIP的場景&#xff0c;默認流量是被攔截的。需要…

Docker安裝ssh,supervisor等基礎工具

2019獨角獸企業重金招聘Python工程師標準>>> Docker安裝ssh&#xff0c;supervisor等基礎工具 需要提前下載好官方的ubuntu鏡像&#xff0c;我這里使用的是ubuntu:14.04版本&#xff0c;這里安裝了一些基礎的工具ssh&#xff0c;curl&#xff0c;wget&#xff0c;vi…

中南大學 oracle試卷,數據庫原理期末復習(中南大學)數據庫原理、技術及應用2.ppt...

2014 春季 信息11,12 DB P,T&A-張祖平 數據庫原理、技術及應用 張祖平/Zhang Zuping 電子信息工程系 School of Information Science and Engineering,Central South University , zpzhangmail.csu.edu.cn 本章小結 關系模型中的相關概念 關系(集合)&#xff0c;性質&#…

Pandas時間差(Timedelta)

時間差(Timedelta)是時間上的差異&#xff0c;以不同的單位來表示。例如&#xff1a;日&#xff0c;小時&#xff0c;分鐘&#xff0c;秒。它們可以是正值&#xff0c;也可以是負值。可以使用各種參數創建Timedelta對象&#xff0c;如下所示 - 字符串 通過傳遞字符串&#xff0…

nginx集群_windows環境下搭建簡單Nginx+Tomcat集群

通俗點將&#xff0c;負載均衡就是因為訪問流量太大&#xff0c;導致項目訪問不流暢、甚至宕掉&#xff0c;所以通過一種分流的方式來緩解這種情況。一、 工具nginx-1.8.0apache-tomcat-6.0.33二、 目標實現高性能負載均衡的Tomcat集群&#xff1a;三、 步驟1、首先下載Nginx&a…

顏色傳感器TCS230及顏色識別電路(轉)

摘要 TCS230是美國TAOS公司生產的一種可編程彩色光到頻率的傳感器。該傳感器具有分辨率高、可編程的顏色選擇與輸出定標、單電源供電等特點&#xff1b;輸出為數字量&#xff0c;可直接與微處理器連接。文中主要介紹TCS230的原理和應用&#xff0c;以及色光和白平衡的知識&…

自定義對話框 提示:Unable to add window token null is not for an application

這是因為在new Dialog(context);的時候傳入的context是通過getApplicationContext()獲得的&#xff0c;這樣就會報錯。 把context的獲得方式改為MainActivity.this就好了。 轉載于:https://www.cnblogs.com/qlong8807/p/5167560.html

[51Nod 1218] 最長遞增子序列 V2 (LIS)

傳送門 Description 數組A包含N個整數。設S為A的子序列且S中的元素是遞增的&#xff0c;則S為A的遞增子序列。如果S的長度是所有遞增子序列中最長的&#xff0c;則稱S為A的最長遞增子序列&#xff08;LIS&#xff09;。A的LIS可能有很多個。例如A為&#xff1a;1 3 2 0 4&#…