久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

javascript快速入門15

 橘子悅讀 2013-12-02

節(jié)點類型

DOM定義了Node的接口以及許多種節(jié)點類型來表示節(jié)點的多個方面!

  • Document——最頂層的節(jié)點,所有的其他節(jié)點都是附屬于它的,。
  • DocumentType——DTD引用(使用<!DOCTYPE >語法)的對象表現(xiàn)形式,,例如<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" >。它不能包含子節(jié)點,。
  • DocumentFragment——可以像Document一樣來保存其他節(jié)點,。
  • Element——表示起始標簽和結(jié)束標簽之間的內(nèi)容,例如<tag ></tag >或者<tag / >,。這是唯一可以同時包含特性和子節(jié)點的節(jié)點類型,。
  • Attr——代表一對特性名和特性值。這個節(jié)點類型不能包含子節(jié)點,。
  • Text——代表XML文檔中的在起始標簽和結(jié)束標簽之間,,或者CData Section內(nèi)包含的普通文本。這個節(jié)點類型不能包含子節(jié)點,。
  • CDataSection——<![CDATA[ ]]>的對象表現(xiàn)形式,。這個節(jié)點類型僅能包含文本節(jié)點Text作為子節(jié)點。
  • Entity——表示在DTD中的一個實體定義,,例如<!ENTITY foo "foo">,。這個節(jié)點類型不能包含子節(jié)點。
  • EntityReference——代表一個實體引用,,例如"。這個節(jié)點類型不能包含子節(jié)點。
  • ProcessingInstruction——代表一個PI(處理指令),。這個節(jié)點類型不能包含子節(jié)點,。
  • Comment——代表注釋。這個節(jié)點類型不能包含子節(jié)點,。
  • Notation——代表在DTD中定義的記號,。這個很少用到,所以我們不會討論,。

還定義了對應(yīng)不同節(jié)點類型的12個常量.

  • Node.ELEMENT_NODE (1)
  • Node.ATTRIBUTE_NODE (2)
  • Node.TEXT_NODE (3)
  • Node.CDATA_SECTION_NODE (4)
  • Node.ENTITY_REFERENCE_NODE (5)
  • Node.ENTITY_NODE (6)
  • Node.PROCESSING_INSTRUCTION_NODE (7)
  • Node.COMMENT_NODE (8)
  • Node.DOCUMENT_NODE (9)
  • Node.DOCUMENT_TYPE_NODE (10)
  • Node.DOCUMENT_FRAGMENT_NODE (11)
  • Node.NOTATION_NODE (12)

節(jié)點類型常量都是Node對象的屬性,,但是IE不支持Node對象,但是仍可以使用數(shù)值

Node接口也定義了一些所有節(jié)點類型都包含的特性和方法。我們在下面的表格中列出了這些特性和方法:

特性/方法 類型/返回類型 說 明
nodeName String 節(jié)點的名字,;根據(jù)節(jié)點的類型而定義,元素節(jié)點返回tagName,,文本節(jié)點返回#text,屬性節(jié)點返回屬性名
nodeValue String 節(jié)點的值;根據(jù)節(jié)點的類型而定義.元素節(jié)點此屬性為空,,文本節(jié)點些屬性即為節(jié)點中的字符串,,屬性節(jié)點返回屬性值
nodeType Number 節(jié)點的類型常量值之一
ownerDocument Document 指向這個節(jié)點所屬的文檔
firstChild Node 指向在childNodes列表中的第一個節(jié)點
lastChild Node 指向在childNodes列表中的最后一個節(jié)點
childNodes NodeList 所有子節(jié)點的列表
previousSibling Node 指向前一個兄弟節(jié)點;如果這個節(jié)點就是第一個兄弟節(jié)點,,那么該值為null
nextSibling Node 指向后一個兄弟節(jié)點,;如果這個節(jié)點就是最后一個兄弟節(jié)點,那么該值為null
hasChildNodes() Boolean 當childNodes包含一個或多個節(jié)點時,,返回真
attributes NamedNodeMap 包含了代表一個元素的特性的Attr對象,;僅用于Element節(jié)點
appendChild(node) Node node添加到childNodes的末尾
removeChild(node) Node 從childNodes中刪除node
replaceChild (newnode,oldnode) Node 將childNodes中的oldnode替換成newnode
insertBefore (newnode,refnode) Node 在childNodes中的refnode之前插入newnode

除節(jié)點外,DOM還定義了一些助手對象,,它們可以和節(jié)點一起使用,,但不是DOM文檔必有的部分。

  • NodeList——節(jié)點數(shù)組,,按照數(shù)值進行索引,;用來表示一個元素的子節(jié)點。比如childNodes,。NodeList有個length屬性表示節(jié)點數(shù)量
  • NamedNodeMap——同時用數(shù)值和名字進行索引的節(jié)點表,;用于表示元素特性。比如元素的attributes,。NamedNodeMap對象也有一個length屬性來指示它所包含的節(jié)點的數(shù)量,。

這些助手對象為處理DOM文檔提供附加的訪問和遍歷方法。

屬性節(jié)點

正如前面提到的,,即便Node接口已具有attributes方法,,且已被所有類型的節(jié)點繼承,然而,,只有Element節(jié)點才能有特性,。Element節(jié)點的attributes屬性其實是NamedNodeMap,,它提供一些用于訪問和處理其內(nèi)容的方法:

  • getNamedItem(name)——返回nodeName屬性值等于name的節(jié)點;
  • removeNamedItem(name)——刪除nodeName屬性值等于name的節(jié)點,;
  • setNamedItem(node)——將node添加到列表中,,按其nodeName屬性進行索引;
  • item(pos)——像NodeList一樣,,返回在位置pos的節(jié)點,;

請記住這些方法都是返回一個Attr節(jié)點,而非特性值,。

當NamedNodeMap用于表示特性時,,其中每個節(jié)點都是Attr節(jié)點,它的nodeName屬性被設(shè)置為特性名稱,,而nodeValue屬性被設(shè)置為特性的值,。示例:

復(fù)制代碼
    <p id="p1" style="background-color:red;" title="P!!!">Some Text!</p>
    var p1 = document.getElementById("p1");
    //訪問ID屬性
    alert(p1.attributes.getNamedItem("id")).nodeValue;
    //也可以用數(shù)值來訪問ID屬性
    alert(p1.attributes.item(0)).nodeValue;
    //也可以改變它的值
    p1.attributes.getNamedItem("id").nodeValue = "newP1";
復(fù)制代碼

 

Attr節(jié)點也有一個完全等同于(同時也完全同步于)nodeValue屬性的value屬性,并且有name屬性和nodeName屬性保持同步,。我們可以隨意使用這些屬性來修改或變更特性,。但這些方法都比較復(fù)雜,所以DOM又定義了三個元素方法來幫助訪問特性:

  • getAttribute(name)——等于attributes.getNamedItem(name).value
  • setAttribute(name, newValue)——等于attribute.getNamedItem(name).value = newValue
  • removeAttribute(name)——等于attributes.removeNamedItem(name)

NodeList

事實上我們早接觸過NodeList了

    var allTags = document.getElementsByTagName("*");
    alert(allTags.item(1).tagName);//訪問了第二個元素
    alert(allTags[0]);//在JavaScript可以這樣訪問第一個元素,,但這只能是JavaScript里正常運行

 

getElementsByTagName與getElementsByName都返回NodeList,,可以使用item(index)方法訪問其中的內(nèi)容,在JavaScript中還可使用數(shù)組形式的下標訪問,!

創(chuàng)建和操縱節(jié)點

迄今為止,,已經(jīng)學(xué)過了如何訪問文檔中的不同節(jié)點,不過這僅僅是使用DOM所能實現(xiàn)的功能中的很小一部分,。還能添加,、刪除、替換(或者其他操作)DOM文檔中的節(jié)點,。正是這些功能使得DOM具有真正意義上的動態(tài)性,。

創(chuàng)建新節(jié)點

DOM Document(文檔)中有一些方法用于創(chuàng)建不同類型的節(jié)點,即便在所有的瀏覽器中的瀏覽器document對象并不需要全部支持所有的方法,。下面的表格列出了包含在DOM Level 1中的方法,,并列出不同的瀏覽器是否支持項。

方 法 描 述 IE MOZ OP SAF
createAttribute (name) 用給定名稱name創(chuàng)建特性節(jié)點 × × ×
createCDATASection (text) 用包含文本text的文本子節(jié)點創(chuàng)建一個CDATA Section ×
createComment(text) 創(chuàng)建包含文本text的注釋節(jié)點 × × × ×
createDocumentFragment() 創(chuàng)建文檔碎片節(jié)點 × × × ×
createElement (tagname) 創(chuàng)建標簽名為tagname的元素 × × × ×
createEntity Reference(name) 創(chuàng)建給定名稱的實體引用節(jié)點 ×
createProcessing Instruction(target, data) 創(chuàng)建包含給定targetdata的PI節(jié)點 ×
createTextNode(text) 創(chuàng)建包含文本text的文本節(jié)點 × × × ×

注:IE = Windows的IE 6,;MOZ = 任意平臺的Mozilla 1.5,;OP=任意平臺的Opera 7.5;SAF=MacOS的Safari 1.2

最常用到的幾個方法是:createDocumentFragment(),、createElement()和createText- Node(),;其他的一些方法要么就是沒什么用(createComment()),要么就是瀏覽器的支持不夠,,目前還不太能用,。

動態(tài)創(chuàng)建一個段落示例

    var p = document.createElement("p");//創(chuàng)建一個元素節(jié)點,,傳入標簽名
    var txt = document.createTextNode("創(chuàng)建文本節(jié)點,傳參數(shù)即是文本內(nèi)容");
    p.appendChild(txt);//將txt所引用的文本節(jié)點插入p到p的最后面(在這里p是空的)
    //直到現(xiàn)在,頁面不會出現(xiàn)任何內(nèi)容,,必須將創(chuàng)建的節(jié)點插入到文檔中
    document.body.appendChild(p);//p將出現(xiàn)在最后

 

移動,,刪除節(jié)點方法及注意事項——appendChild,removeChild,replaceChild,insertBefore

復(fù)制代碼
    var p1 = document.getElementById("p1");
    document.body.appendChild(p1);//p1將會被作為body的最后一個子節(jié)點,然而頁面上仍只有一個p
    p1.parentNode.removeChild(p1);//removeChild必須是要刪除的節(jié)點的父節(jié)點調(diào)用
    //p1將會從頁面上消失,,然而它并沒有完全消失,我們還可以再將其插入文檔
    document.body.appendChild(p1);//因為變量p1包含了節(jié)點的引用
    var p2 = document.getElementById("p2");
    p2.parentNode.replaceChild(p1,p2);//p2將會被替換成p1,,p2將消失
    //而p1將從原來的位置移到p2的位置
復(fù)制代碼

 

克隆節(jié)點——cloneNode

基于上面的原因,,DOM為我們提供了一個克隆節(jié)點的方法用于生成一個節(jié)點的副本

    var p1 = document.getElementById("p1");
    var p2 = p1.cloneNode();
    document.body.appendChild(p2);//頁面上將會多出一個段落,不過段落中什么都沒有
    p2 = p1.cloneNode(true);//使用參數(shù)true表示克隆節(jié)點時包含子節(jié)點
    document.body.appendChild(p2);

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多