1. 程式人生 > >DOM節點資訊、DOM屬性、三大節點、替換節點、查詢設定屬性節點、建立刪除插入節點、innerHTML屬性、顯示彈出視窗

DOM節點資訊、DOM屬性、三大節點、替換節點、查詢設定屬性節點、建立刪除插入節點、innerHTML屬性、顯示彈出視窗

DOM節點資訊DOM屬性、三大節點、替換節點、查詢設定屬性節點、建立刪除插入節點、innerHTML屬性、顯示彈出視窗

DOM節點資訊

每個節點都擁有包含著關於節點某些資訊的屬性。這些屬性是:

nodeName(節點名稱) 

nodeValue(節點值) 

nodeType(節點型別)

DOM屬性---nodeName

nodeName 屬性含有某個節點的名稱。

var name = node.nodeName;

元素節點的 nodeName 是標籤名稱 

屬性節點的 nodeName 是屬性名稱 

文字節點的 nodeName 永遠是 #text 

文件節點的 nodeName 永遠是 

#document 

註釋:nodeName 所包含的 html 元素的標籤名稱永遠是大寫的

DOM 屬性 -- nodeValue

nodeValue:返回給定節點的當前值(字串)

 如果給定節點是一個屬性節點,返回值是這個屬性的值。

 如果給定節點是一個文字節點,返回值是這個文字節點的內容。

 如果給定節點是一個元素節點,返回值是 null

 nodeValue 是一個 讀/寫 屬性,但不能對元素節點的 nodeValue 屬性設定值,

    但可以為文字節點的 nodeValue 屬性設定一個值。

   var li = document.getElementById(li);

   if(li.firstChild.nodeType == 3)

      li.firstChild.nodeValue = “國慶60年”;

DOM 屬性 -- nodeType

nodeType:返回一個整數,這個數值代表著給定節點的型別。

nodeType 屬性返回的整數值對應著 12 種節點型別,常用的有三種:

Node.ELEMENT_NODE    ---1    -- 元素節點

Node.ATTRIBUTE_NODE  ---2    -- 屬性節點

Node.TEXT_NODE       ---3    -- 文字節點

nodeType 是個只讀屬性

三大節點--元素節點

//測試元素節點,輸出節點名稱,節點的型別,節點的值

  var liElements=document.getElementsByTagName("li");

  for(var i=0;i<liElements.length;i++){

     alert(liElements[i].nodeName);

     alert(liElements[i].nodeType);

     alert(liElements[i].nodeValue);

  }

三大節點--屬性節點

//測試屬性節點,輸出屬性節點名稱,節點的型別,節點的值

  var liElements=document.getElementsByTagName("li");

  for(var i=0;i<liElements.length;i++){

      var attrElement=liElements[i].getAttributeNode("value")

      alert("attrElement.nodeName "+attrElement.nodeName);

      alert("attrElement.nodeType "+attrElement.nodeType);

      alert("attrElement.nodeValue "+liElements[i].getAttribute("value"));

  }

三大節點--文字節點

//測試元素節點,輸出節點名稱,節點的型別,節點的值

  var liElements=document.getElementsByTagName("li");

  for(var i=0;i<liElements.length;i++){

   alert(liElements[i].childNodes[0].nodeName);

   alert(liElements[i].childNodes[0].nodeType);

   alert(liElements[i].childNodes[0].nodeValue);

   liElements[i].childNodes[0].nodeValue="南京";

   alert(liElements[i].childNodes[0].nodeValue);

   //另一種讀取方法

   alert(liElements[i].firstChild.nodeName);

   alert(liElements[i].firstChild.nodeType);

   alert(liElements[i].firstChild.nodeValue);

  }

替換節點

replaceChild()

把一個給定父元素裡的一個子節點替換為另外一個子節點

var reference = element.replaceChild(newChild,oldChild);

返回值是一個指向已被替換的那個子節點的引用指標。

如果被插入的子節點還有子節點,則那些子節點也被插入到目標節點中

替換節點例子

//  var cityElement=document.getElementById("city");

//  var loveElement=document.getElementById("love");

//  var cityChildElement=document.getElementById("beijing");

//  var loveChildElement=document.getElementById("fankong");

//  var oldElement=cityElement.replaceChild(loveChildElement,cityChildElement);

//  loveElement.appendChild(oldElement);

//  alert(oldElement.getAttribute("id")); 

  var cityElement=document.getElementById("city");

         cityElement.onclick=function(){

         var cityChildElement=document.getElementById("beijing");

         var loveChildElement=document.getElementById("fankong");

         var oldElement=cityElement.replaceChild(loveChildElement,cityChildElement);

         loveElement.appendChild(oldElement);

         alert(oldElement.getAttribute("id"));

  }

查詢屬性節點

getAttribute()   

返回一個給定元素的一個給定屬性節點的值

var attributeValue = element.getAttribute(attributeName);

給定屬性的名字必須以字串的形式傳遞給該方法。

給定屬性的值將以字串的形式返回,如果給定屬性不存在,getAttribute() 將返回一個空字串.

通過屬性獲取屬性節點

   getAttributeNode(屬性的名稱)--Node

<li name="beijing" id="bj">北京</li> 

   //通過屬性名獲取屬性的值

     var  bjElement=document.getElementById("bj");

     var attributeValue=eduElement.getAttribute("name");

     alert("attributeValue    "+attributeValue);

   //通過屬性名獲取屬性的節點

   var  bjNode=eduElement.getAttributeNode("name");

       alert(eduNode.nodeValue);

       alert(eduNode.nodeType);

       alert(eduNode.nodeName);

設定屬性節點

setAttribute()

將給定元素節點新增一個新的屬性值或改變它的現有屬性的值。

   element.setAttribute(attributeName,attributeValue);

屬性的名字和值必須以字串的形式傳遞給此方法

如果這個屬性已經存在,它的值將被重新整理;

如果不存在,setAttribute()方法將先建立它再為其賦值。

<li  id="bj" >北京</li> 

   //獲取元素的引用

   var bjElement=document.getElementById("bj");

   //設定屬性值

   bjElement.setAttribute("name","beijing");

   //獲取設定的屬性值

   var nameValue=bjElement.getAttribute("name");

   alert("nameValue "+nameValue);

建立新元素節點

createElement()

按照給定的標籤名建立一個新的元素節點。方法只有一個引數:將被建立的元素的名字,是一個字串.

  var reference = document.createElement(element);

方法的返回值:是一個指向新建節點的引用指標。返回值是一個元素節點,所以它的 nodeType 屬性值等於 1

新元素節點不會自動新增到文件裡,新節點沒有 nodeParent 屬性,它只是一個存在於 JavaScript 上下文的物件.

var pElement = document.createElement("p");

設定屬性節點

 //建立一個新的元素

  var pElement=document.createElement("li");

  //設定屬性值

  pElement.setAttribute("id","pid");

  //獲取父元素

  var loveElement=document.getElementById("love");

  //在父元素中增加子元素

loveElement.appendChild(pElement);

  //通過id獲取剛建立的元素

  var pidElement=document.getElementById("pid");

  alert(pidElement.getAttribute("id"));

建立新文字節點

createTextNode()

建立一個包含著給定文字的新文字節點。這個方法的返回值是一個指向新建文字節點引用指標。

  var textNode = document.createTextNode(text);

方法只有一個引數:新建文字節點所包含的文字字串

方法的返回值:是一個指向新建節點的引用指標。它是一個文字節點,所以它的 nodeType 屬性等於 3.

新元素節點不會自動新增到文件裡,新節點沒有 nodeParent 屬性

      var pElementText=document.createElement("li");

  var textElement=document.createTextNode("南京");

  pElementText.appendChild(textElement);

插入節點(1

appendChild()

為給定元素增加一個子節點:                                   

   var newreference = element.appendChild(newChild).              

   給定子節點 newChild 將成為給定元素節點 element 的最後一個子節點。

方法的返回值是一個指向新增子節點的引用指標。

該方法通常與 createElement() createTextNode() 配合使用

新節點可以被追加給文件中的任何一個元素

var newliElement=document.createElement("li");

 var textNode=document.createTextNode("北京");

 newliElement.appendChild(textNode);

 document.body.appendChild(newliElement);

 var liElement=document.getElementsByTagName("li");

 var textValue=liElement[0].firstChild.nodeValue;

 alert(textValue);

插入節點(2

insertBefore()

把一個給定節點插入到一個給定元素節點的給定子節點的前面

  var reference =  element.insertBefore(newNode,targetNode);

  節點 newNode 將被插入到元素節點 element 中並出現在節點 targetNode 的前面.

節點 targetNode 必須是 element 元素的一個子節點。

該方法通常與 createElement() 和 createTextNode() 配合使用

<ul id="city">     <li value="beijing^" id="beijing">北京</li>        </ul>

  <ul id="city01">   <li value="shanghai^" id="shanghai">上海</li>          </ul>

 //獲取父節點

 var parentCityNode=document.getElementById("city");

 //獲取子節點

 var beijingNode=document.getElementById("beijing");

 var shanghaiNode=document.getElementById("shanghai");

 //插入

 parentCityNode.insertBefore(shanghaiNode,beijingNode);

<ul id="city">

        <li value="beijing^" id="beijing">北京</li>

 </ul>

 //獲取父節點

 var parentCityNode=document.getElementById("city");

 //獲取子節點

 var beijingNode=document.getElementById("beijing");

 //建立節點newShanghaiNode

 var newShanghaiNode=document.createElement("li"); 

 //建立newShanghaiNode節點的文字節點

 var newTextNode=document.createTextNode("上海");

//在建立的節點上增加文字

 newShanghaiNode.appendChild(newTextNode);

 //插入節點

 parentCityNode.insertBefore(newShanghaiNode,beijingNode);

插入節點(3)

DOM 沒有提供 insertAfter() 方法

function insertAfter(newElement,targetElement){

   //獲取目標元素的父節點

var parentElement=targetElement.parentNode;

   //如果目標元素是最後一個元素,則新元素插入到目標元素的後面

if(parentElement.lastChild==targetElement){

    parentElement.appendChild(newElement);

}else{//如果目標元素不是最後一個元素,則新元素插入到目標元素的的

   //下一個兄弟節點的前面,即目標元素的後面

   parentElement.insertBefore(newElement,targetElement.nextSibling);

}

 }

刪除節點

removeChild()

從一個給定元素裡刪除一個子節點

   var reference = element.removeChild(node);

返回值是一個指向已被刪除的子節點的引用指標。

某個節點被removeChild()方法刪除時,這個節點所包含的所有子節點將同時被刪除。

 <ul id="city">  <li value="beijing^" id="beijing">北京</li> </ul>

 var ulElement=document.getElementById("city");

 var liElement=document.getElementById("beijing");

 ulElement.removeChild(liElement);

如果想刪除某個節點,但不知道它的父節點是哪一個,parentNode 屬性可以幫忙。

<ul id="city">  <li value="beijing^" id="beijing">北京</li> </ul>

   var liElement=document.getElementById("beijing");

   var parentElement=liElement.parentNode;

   parentElement.removeChild(liElement);

遍歷節點樹

ChildNodes:返回一個數組,這個陣列由給定元素節點的子節點構成:

var nodeList = node.childNodes;

文字節點和屬性節點都不可能再包含任何子節點,所以它們的 ChildNodes 屬性永遠會返回一個空陣列。

如果想知道某個元素有沒有子節點,可以用 hasChildNodes 方法。

如果想知道某個元素有多少個子節點,可以用 childNodes 陣列的 length 屬性。

childNodes 屬性是一個只讀屬性。

獲取第一個子節點

firstChild:該屬性返回一個給定元素節點的第一個子節點,返回這個節點物件的指標。

    var reference = node.firstChild;

文字節點和屬性節點都不可能包含任何子節點,所以它們的 firstChild 屬性永遠會返回 null

某個元素的 firstChild 屬性等價於這個元素的 childNodes 節點集合中的第一個節點,即:

  var reference = node.ChildNodes[0];

firstChild 屬性是一個只讀屬性。

獲取最後一個子節點

lastChild:對應 firstChild 的一個屬性。

nextSibling: 返回一個給定節點的下一個兄弟節點。

parentNode:返回一個給定節點的父節點。

parentNode 屬性返回的節點永遠是一個元素節點,因為只有元素節點才有可能包含子節點。

document 節點的沒有父節點。

previousSibling:返回一個給定節點的上一個兄弟節點

innerHTML屬性

瀏覽器幾乎都支援該屬性,但不是 DOM 標準的組成部分。

innerHTML 屬性可以用來讀,寫某給定元素裡的 HTML 內容。

<div id="city"></div>

  var divElement=document.getElementById("city");

  divElement.innerHTML="<li value='beijing^'' id='beijing'>北京</li>";

顯示彈出視窗(方案一)

語法:

vReturnValue = window . showModalDialog ( sURL,

                                                    vArguments , sFeatures )

引數說明: 

sURL--必選引數,用來指定對話方塊要顯示的文件的URL。 

vArguments--可選引數,用來向對話方塊傳遞引數。傳遞的引數型別不限,包括陣列等。對話方塊通過window.dialogArguments來取得傳遞進來的引數。 

sFeatures--可選引數,用來描述對話方塊的外觀等資訊,可以使用一個或幾個,用分號“;”隔開。

顯示彈出視窗(方案二)

window.opener 的用法

     window.opener 返回的是建立當前視窗的那個視窗的引用,比如點選了a.htm上的一個連結而打開了b.htm,然後我們打算在b.htm上輸入一個值然後賦予a.htm上的一個id為“name”的text中,就可以寫為: 
    window.opener.document.getElementById("name").value = "輸入的資料";