DOM節點資訊、DOM屬性、三大節點、替換節點、查詢設定屬性節點、建立刪除插入節點、innerHTML屬性、顯示彈出視窗
DOM節點資訊、DOM屬性、三大節點、替換節點、查詢設定屬性節點、建立刪除插入節點、innerHTML屬性、顯示彈出視窗
DOM節點資訊
每個節點都擁有包含著關於節點某些資訊的屬性。這些屬性是:
nodeName(節點名稱)
nodeValue(節點值)
nodeType(節點型別)
DOM屬性---nodeName
nodeName 屬性含有某個節點的名稱。
var name = node.nodeName;
元素節點的 nodeName 是標籤名稱
屬性節點的 nodeName 是屬性名稱
文字節點的 nodeName 永遠是 #text
文件節點的 nodeName 永遠是
註釋: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 = "輸入的資料";