DOM

 

DOMcss

node類型(基本類型,如下其餘類型的鼻祖)html

  一、nodeTypenode

      parentNode:父節點數組

      childNodes:子節點(理解成一個數組)瀏覽器

       someNode.firstChild == someNode.childNodes[0];app

       someNode.lastChild == someNode.childNodes[someNode.childNodes.length-1];框架

       previouSiblings和nextSibling:兄弟節點
dom

       hasChildNodes()判斷是否有子節點函數

       元素文本都算是節點編碼

  二、操做節點

      插入

        appendChild();向末尾插入,(標籤的裏面)

        insertBefore();將節點插入到某個特定位置,第一個參數插入的節點,第二個參數參照節點

      替換

        replaceChild():第一個參數:新節點,第二個參數是要替換的

      移除

        removeChild(node);節點參數

        

      複製

        cloneNode();布爾參數,true是深複製

Document類型(對象)(得到,寫入文檔節點,location用法)

  document對象是window對象的屬性。

  一、文檔信息

      documentElement屬性(指向html元素)

      body屬性(body元素)

      document.doctype;//取得<!DOCTYPE>的引用

        document.title:獲取或設置title的值

      取:var title = document.title

      改:document.title = 「xxx」

  二、網頁信息

      

        document.location.href === document.URL

      (在console打印時少用等號)

        例:document.domain = "www.baidu.html",domain是能夠設置的

      獲取前一個頁面的url:document.referrer       

      location對象的用法,如下新增

      

    三、獲取元素

      getElementById();取得id

      getElementsByTagName();取得標籤名

      getElementByName();根據name屬性名返回元素,經常使用在單選按鈕中

  四、寫入元素

      write():字符串參數,直接原樣輸出到文檔流中,在頁面加載完成後執行會複寫整個頁面

      writeIn();同上,可是在末尾會添加換行符  

      open(),close()打開或關閉網頁的輸出流

Element類型(建立標籤名和屬性特性的操做)

  提供了對元素標籤的名,子節點及特性的訪問

  一、訪問標籤名

      元素.tagName;//"DIV"

      元素.nodeName;//"DIV"

  二、html

      屬性:id,className,title,lang,dir,這些屬性均可以用來獲取或修改屬性值

        var ele = document.getElementById("id");

      獲取:

        alert(ele.id);

      修改:

        ele.id = "someOtherId";

  三、取得元素特性

      getAttribute(屬性名);//ele.getAeeribute("id");//id//getAttribute("class")

        特色:style特性,用getAttribute();訪問獲取到的是css文本,經過屬性訪問則會返回一個對象。

  四、設置元素特性

      setAttribute("設置的特姓名",值);

        ele.setAttribute("class","newClass");

        另外一種寫法:ele.class = "newClass";//注意自定義的屬性這樣修改會報錯

  五、刪除元素的特性

      removeAttribute();會完全刪除元素特性

  六、attributes屬性

      只有Element類型使用,動態的特性類型集合,包含NameNodeMap對象,有如下方法(不經常使用)

         (nodeName:特性名稱,nodeValue:特性的值)

        getNamedItem(name);返回nodeName屬性等於name的節點;

        removeNamedItem(name);移除nodeName屬性等於name的節點;返回的是被刪除的節點

        setNamedltem(node);向列表中添加節點

        item(pos);返回位於數字pos處的節點

        例:var id  = ele.attributes.getNamedItem("id").nodeValue;//獲取元素的id特性

          var id = ele.attributes["id"].nodeValute;//這裏把attributes理解爲對象

          設置新值:

          ele.attributes[」id「].nodeValue = "newid";

      用這個屬性來迭代屬性的值,attributes.length,用for遍歷(把元素屬性封裝到數組裏

  七、建立新元素

      document.createElement(標籤名);

      例:var div = document.createElement("div");

        div.id = "newId"

      只是建立了個新元素,但未把它添加到文檔樹裏

  八、將新元素添加到文檔樹裏

      document.body.appendchild(div);

text類型

  純文本內容,不能包含元素標籤,沒有子節點

  訪問

      nodeValue屬性和data屬性

 

   建立

      document.createTextNode();

  

  添加

      appendData(text);將內容添加到節點末尾(標籤裏面)

    插入

      insertData(offset,text);在offset位置插入count

  刪除

      deleteData(offset,count);從offert位置開始刪除count個字符

  替換

      replaceData(offset,count,text);用text替換offset到count的文本

  分割

      splitText(offset);從offset開始將文本分爲兩個文本節點

      返回從數字開始以後的文本,包含數字下的那個字符。原文本留下數字以前的文本。

  獲取

      substringData(offset,count);提取從offset開始到count結尾的文本

  length屬性

      nodeValue.length = data.length

  合併文本節點,假設一個元素下有兩個文本節點,用這個方法合併後只有一個

      normalize();

Comment類型

  註釋相關,和text類型繼承同一個基類

  建立註釋

      document.createComment();

CDATASection類型

  用在XML文檔下,表示CDATA區域

DocumentType類型

  包含文檔有關doctype的有關信息

DocumentFragment類型

  建立了文本片斷,不會顯示在文檔流中,看成一個備用倉庫使用

  建立

      document.createDocumentFragment(); 

Attr類型

  表示元素特性,特性也就是存在於attributes屬性中的節點

    屬性:name,value,specified:布爾值,區別指定的仍是默認的

  建立

      document.createAttribute();

  賦值

      var attr = document.createAttribute("align");

      attr.value = "left";

  獲取

      ele.attributes["align"].value

      ele.getAttributeNode("align").value;

      ele.getAttribute("value");

  添加

      ele.setAttributeNode("align");

DOM操做技術

動態腳本

    建立隨時調用的腳本

    

       用script元素的text屬性來添加腳本內容

      或者用appendChild()來添加(ie下會出錯),執行起來有點像eval()方法

動態樣式

  建立外部樣式

  

  建立內部樣式(會實時執行)

  

  以上添加樣式代碼在ie下會出錯,另外一個方法:

    style.styleSheet.cssText = "body{width:100px;}",

    styleSheet是style元素的屬性

操做表格

  各類table屬性。。。

使用NodeList

  有點像NamedNodeMap和HTMLCollection

  動態的dom流,能夠用for,length屬性迭代,每次訪問都會查詢一次文檔,因此要減小直接對dom的操做。

總結:

      一、node是最基本的節點類型,其餘類型都繼承自它。

      二、document類型表示整個文檔,跟節點,document是document類型的實例。

      三、element節點表示文檔的html和xml元素。

      四、操做文本節點。

 

DOM拓展

選擇符API

  document類型新增

  一、querySelector();接收一個css選擇符

      

  二、querySelectorAll();接收一個css選擇符

      取得該選擇符下的全部元素,返回一個NodeList

      例:var p = document.querySelectorAll("p strong");//取得p元素下的全部strong元素

  element類型新增

  三、matchesSelector();接收一個css選擇符參數,判斷元素是不是個css選擇符的引用,返回true或者false。不經常使用

元素遍歷(查找)

  節點類型

      childElementCount:返回子元素的個數,不包括文本節點和註釋

      filstElementChild:返回第一個子元素,firstChild的元素版

      lastElementChild:返回最後一個子元素

      previousElementChild:返回前一個同胞元素,previousSibling的元素版

      nextElementChild:返回後一個同胞元素,nextSibling的元素版

HTML5

  類相關

      一、getElementsByClassName();

          例:取得id爲text下的全部類名爲info的元素

          document.getElementById("text").getElementsByClassName("info");

      二、元素的classList屬性,表示元素的類列表,一樣這個屬性是新集合DOMTokenList的實例,它有如下方法(兼容性較差)

          添加類

            add(value);

            例:ele.classList.add("newClass")

          判斷是否存在類

            contains(value);返回布爾值

          刪除

            remove(value);

          刪除或給定,有則刪除,無則添加

            toggle(value);

  焦點管理

      一、document.activeElement:得到當前得到焦點的元素,文檔加載完表示的是body,加載中是null

      二、document.hasFocus():檢查文檔是否得到焦點,用這個方法判斷用戶是否正在與頁面交互 

  HTMLDocument的變化

      一、readyState屬性

          兩個值:

            loading正在加載的文檔

            complete已經加載完成的文檔

          if(document.readyState == complete){}等於onload事件

      二、compatMode屬性,區分頁面渲染模式

          兩個值:

            CSS1Compat:標準模式

            BackCompat:混雜模式

       三、document.head屬性,兼容性差

  字符集屬性(編碼相關)

      一、document.charset = "UTF-8";修改charset的值

      二、defaultCharset:表示瀏覽器默認的字符集是什麼,兼容性差

  自定義數據屬性

      爲元素添加屬性,但要data-爲開頭,

          例:<div id="add" data-num = "123"></div>

      dataset屬性來獲取或設置自定義屬性

          例:ele.dataset.num = "1234";//這個ele最好是id獲取的元素,惟一的

  插入標記

      一、innerHTML屬性:返回或調用元素的全部子節點(包括註釋和文本)相似於jq的html()方法。

        

          不能單純的直接插入script和style標籤

      二、outerHTML屬性

          可讀:獲取調用元素的全部子節點的html標籤

          修改:替換包括調用元素在內的全部內容

      三、insertAdjacentHTML()方法

          

      四、scrollIntoView()方法:對全部html元素可用,滾動頁面,讓元素出如今視口中,兼容差

專有拓展

  一、文檔模式

  二、children屬性

      表示元素子節點,等同於childNodes

  三、contains()方法

      檢查某個元素是否是被調用元素(使用這個方法的祖先元素)的子元素。是,則返回對,接收一個元素參數。

  四、插入文本

       innerText屬性:會返回調用元素下的全部節點數裏的文本內容(會拼接起來),修改的話也會所有複寫能夠添加html代碼。若是要過濾掉html代碼,在使用一遍innerText便可。在ie的兼容上可使用textContent 

      outerText屬性:調用和innerText同樣,可是修改會徹底覆蓋元素,包括調用的元素,也就等同於刪除了調用元素,不建議使用。 

  五、滾動

      scrollIntoViewIfNeeded(alignCenter);

      scrollByLines(lineCount);

      scrollByPages(pageCount);

  

DOM2和DOM3

  這部份內容就是升級了dom的用法,增長了許多屬性方法,增強了交互功能。

  DOM變化

      一、DocumentType類型,新增3個屬性:

          publicId,systemId,internalSubset,這三個都是有關文檔類型聲明的屬性

      二、視圖模塊新增defaultView屬性,指向給定的窗口,是視圖部分惟一新增的屬性,ie不支持,但在ie下有個等價的屬性parentWindow

         三、建立新html文檔document.implementation.createHTMLDocument("new doc");兼容不好

      四、一些node類型的變化

          比較節點的引用對象和類型返回布爾值:isSameNode()和isEqualNode(),參數是比較節點,可使被調用的節點也能夠是其餘節點

          setUserData(),將屬性,值,函數綁定給某個節點,三個參數,屬性,value,數據處理函數

              例:document.body.serUserData("name","newBody",function(){})

          getUserData(),得到設置的屬性值

              例:var data = document.body.getUserData("name")

      五、框架的變化

  樣式 

     (style屬性)針對行內

        訪問:

          ele.style.backgroundImage//ele.style.color//ele.style.cssFloat!!

        獲取:alert(ele.style.color)

        重寫:cssText

          ele.style.cssText = "color:red;font-size:10px";

        遍歷:length,item()

        getPropertyValue(屬性名)方法;返回屬性值的字符串表示

          ele.style.getPropertyValue("color")

        刪除

          ele.style.removeProperty("border");

      計算的樣式(不論是行內仍是外鏈等等)都是隻讀的用法

          一、document.dafultView.getComputedStyle("要計算樣式的元素",「僞元素的字符串,例:after,沒有就填null」)

          

            ie不支持,可是有個相同的屬性:ele.currentStyle

       操做樣式表(鏈入樣式表和<style>插入的樣式表)

            一、文檔中樣式表的集合:document.styleSheets,有個length屬性

              getStyleSheet():返回某個樣式表對象

            二、css規則

        元素大小(元素的屬性,只讀的)

            offsetHeight,offsetWidth:元素的寬高,包括邊框,水平滾動條

            offsetLeft,offsetTop:元素的外邊框到包含元素的內邊框間的距離

          

            若是容器是body,那麼getElementLeft()和offsetLeft是同樣的

       客戶區大小(只讀的)

            clientWidth屬性:內容區寬度加內邊距寬度

            clientHeight屬性:同上

          

 

 

          瀏覽器的視口大小:document.body.clientWidth。。。

      滾動

          scrollHeight:沒有滾動條的狀況下,元素內容的總高度,能夠獲取元素的實際高度

          scrollWidth:同上

          scrollLeft:被隱藏在內容區域左側的像素數,設置這個屬性能夠改變元素的滾動位置

          scrollTop:同上,scrollTop = 0;讓元素滾回到頂部

        

       肯定元素的大小

        getBoundingClientRect(),返回元素的一個矩形模型,有left,right,top,bottom四個屬性,表示相對於視口的位置

  遍歷

    dom2定義了兩個用於順序遍歷dom結構的類型:NodeIterator和TreeWalker,IE不支持遍歷dom

        一、NodeIterator

          建立該類型的實例:document.createNodeIterator() 四個參數

          主要方法:nextNode()向前遍歷,previousNode()向後遍歷

        二、TreeWalker

          升級版遍歷,多方向遍歷,除了上述兩個方法,還有:

            parentNode();父節點,

            firstChild();第一個子節點

            lastChild();當前節點最後一個子節點;

            nextSibling();當前節點的下一個同輩節點;

            previousSibling();遍歷到當前節點的上一個同輩節點

          建立一個遍歷實例:document.createTreeWalker();一樣有四個參數

  範圍

    選擇文檔中的一個區域

     建立dom範圍:var range = document.createRange();

       每一個範圍是range類型的實例,有如下屬性或方法    

 

          添加內容:

            selectNode(),接收一個dom節點,用該節點內容來填充範圍,會選擇整個節點,包括子節點。

            selectNodeContents(),只選擇節點的子節點

          實現複雜選擇:

            setStart()和setEnd()

      操做dom範圍裏的內容

        刪除:一、deleteContents()

           二、extractContents();也是刪除,可是它會返回範圍的文檔片斷,能夠用這個返回的添加到其餘元素裏

        克隆:cloneContents,複製文檔片斷的一個副本

        插入:insertNode();向範圍選取的開始出插入一個節點

           surroundContents:環繞範圍添加內容

        摺疊:collapse();一個參數,true摺疊到開始位置,false摺疊到結束位置

        比較:compareBoundaryPoints();來肯定某些範圍是否有公共邊界

        複製:cloneRange();複製範圍的一個副本

        清理使用後的範圍:detach();一旦清除就不能在使用了      

相關文章
相關標籤/搜索