DOM節(jié)點(diǎn)信息、DOM屬性、三大節(jié)點(diǎn)、替換節(jié)點(diǎn)、查找設(shè)置屬性節(jié)點(diǎn)、創(chuàng)建刪除插入節(jié)點(diǎn)、innerHTML屬性、顯示彈出窗口
DOM節(jié)點(diǎn)信息
每個(gè)節(jié)點(diǎn)都擁有包含著關(guān)于節(jié)點(diǎn)某些信息的屬性。這些屬性是:
nodeName(節(jié)點(diǎn)名稱)
nodeValue(節(jié)點(diǎn)值)
nodeType(節(jié)點(diǎn)類型)
DOM屬性---nodeName
nodeName 屬性含有某個(gè)節(jié)點(diǎn)的名稱。
var name = node.nodeName;
元素節(jié)點(diǎn)的 nodeName 是標(biāo)簽名稱
屬性節(jié)點(diǎn)的 nodeName 是屬性名稱
文本節(jié)點(diǎn)的 nodeName 永遠(yuǎn)是 #text
文檔節(jié)點(diǎn)的 nodeName 永遠(yuǎn)是 #document
注釋:nodeName 所包含的 html 元素的標(biāo)簽名稱永遠(yuǎn)是大寫的
DOM 屬性 -- nodeValue
nodeValue:返回給定節(jié)點(diǎn)的當(dāng)前值(字符串)
如果給定節(jié)點(diǎn)是一個(gè)屬性節(jié)點(diǎn),返回值是這個(gè)屬性的值。
如果給定節(jié)點(diǎn)是一個(gè)文本節(jié)點(diǎn),返回值是這個(gè)文本節(jié)點(diǎn)的內(nèi)容。
如果給定節(jié)點(diǎn)是一個(gè)元素節(jié)點(diǎn),返回值是 null
nodeValue 是一個(gè) 讀/寫 屬性,但不能對(duì)元素節(jié)點(diǎn)的 nodeValue 屬性設(shè)置值,
但可以為文本節(jié)點(diǎn)的 nodeValue 屬性設(shè)置一個(gè)值。
var li = document.getElementById(“li”);
if(li.firstChild.nodeType == 3)
li.firstChild.nodeValue = “國(guó)慶60年”;
DOM 屬性 -- nodeType
nodeType:返回一個(gè)整數(shù),這個(gè)數(shù)值代表著給定節(jié)點(diǎn)的類型。
nodeType 屬性返回的整數(shù)值對(duì)應(yīng)著 12 種節(jié)點(diǎn)類型,常用的有三種:
Node.ELEMENT_NODE ---1 -- 元素節(jié)點(diǎn)
Node.ATTRIBUTE_NODE ---2 -- 屬性節(jié)點(diǎn)
Node.TEXT_NODE ---3 -- 文本節(jié)點(diǎn)
nodeType 是個(gè)只讀屬性
三大節(jié)點(diǎn)--元素節(jié)點(diǎn)
//測(cè)試元素節(jié)點(diǎn),輸出節(jié)點(diǎn)名稱,節(jié)點(diǎn)的類型,節(jié)點(diǎn)的值
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);
}
三大節(jié)點(diǎn)--屬性節(jié)點(diǎn)
//測(cè)試屬性節(jié)點(diǎn),輸出屬性節(jié)點(diǎn)名稱,節(jié)點(diǎn)的類型,節(jié)點(diǎn)的值
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"));
}
三大節(jié)點(diǎn)--文本節(jié)點(diǎn)
//測(cè)試元素節(jié)點(diǎn),輸出節(jié)點(diǎn)名稱,節(jié)點(diǎn)的類型,節(jié)點(diǎn)的值
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);
}
替換節(jié)點(diǎn)
replaceChild()
把一個(gè)給定父元素里的一個(gè)子節(jié)點(diǎn)替換為另外一個(gè)子節(jié)點(diǎn)
var reference = element.replaceChild(newChild,oldChild);
返回值是一個(gè)指向已被替換的那個(gè)子節(jié)點(diǎn)的引用指針。
如果被插入的子節(jié)點(diǎn)還有子節(jié)點(diǎn),則那些子節(jié)點(diǎn)也被插入到目標(biāo)節(jié)點(diǎn)中
替換節(jié)點(diǎn)例子
// 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"));
}
查找屬性節(jié)點(diǎn)
getAttribute()
返回一個(gè)給定元素的一個(gè)給定屬性節(jié)點(diǎn)的值
var attributeValue = element.getAttribute(attributeName);
給定屬性的名字必須以字符串的形式傳遞給該方法。
給定屬性的值將以字符串的形式返回,如果給定屬性不存在,getAttribute() 將返回一個(gè)空字符串.
通過(guò)屬性獲取屬性節(jié)點(diǎn)
getAttributeNode(屬性的名稱)--Node
<li name="beijing" id="bj">北京</li>
//通過(guò)屬性名獲取屬性的值
var bjElement=document.getElementById("bj");
var attributeValue=eduElement.getAttribute("name");
alert("attributeValue "+attributeValue);
//通過(guò)屬性名獲取屬性的節(jié)點(diǎn)
var bjNode=eduElement.getAttributeNode("name");
alert(eduNode.nodeValue);
alert(eduNode.nodeType);
alert(eduNode.nodeName);
設(shè)置屬性節(jié)點(diǎn)
setAttribute()
將給定元素節(jié)點(diǎn)添加一個(gè)新的屬性值或改變它的現(xiàn)有屬性的值。
element.setAttribute(attributeName,attributeValue);
屬性的名字和值必須以字符串的形式傳遞給此方法
如果這個(gè)屬性已經(jīng)存在,它的值將被刷新;
如果不存在,setAttribute()方法將先創(chuàng)建它再為其賦值。
<li id="bj" >北京</li>
//獲取元素的引用
var bjElement=document.getElementById("bj");
//設(shè)置屬性值
bjElement.setAttribute("name","beijing");
//獲取設(shè)置的屬性值
var nameValue=bjElement.getAttribute("name");
alert("nameValue "+nameValue);
創(chuàng)建新元素節(jié)點(diǎn)
createElement()
按照給定的標(biāo)簽名創(chuàng)建一個(gè)新的元素節(jié)點(diǎn)。方法只有一個(gè)參數(shù):將被創(chuàng)建的元素的名字,是一個(gè)字符串.
var reference = document.createElement(element);
方法的返回值:是一個(gè)指向新建節(jié)點(diǎn)的引用指針。返回值是一個(gè)元素節(jié)點(diǎn),所以它的 nodeType 屬性值等于 1。
新元素節(jié)點(diǎn)不會(huì)自動(dòng)添加到文檔里,新節(jié)點(diǎn)沒(méi)有 nodeParent 屬性,它只是一個(gè)存在于 JavaScript 上下文的對(duì)象.
var pElement = document.createElement("p");
設(shè)置屬性節(jié)點(diǎn)
//創(chuàng)建一個(gè)新的元素
var pElement=document.createElement("li");
//設(shè)置屬性值
pElement.setAttribute("id","pid");
//獲取父元素
var loveElement=document.getElementById("love");
//在父元素中增加子元素
loveElement.appendChild(pElement);
//通過(guò)id獲取剛創(chuàng)建的元素
var pidElement=document.getElementById("pid");
alert(pidElement.getAttribute("id"));
創(chuàng)建新文本節(jié)點(diǎn)
createTextNode()
創(chuàng)建一個(gè)包含著給定文本的新文本節(jié)點(diǎn)。這個(gè)方法的返回值是一個(gè)指向新建文本節(jié)點(diǎn)引用指針。
var textNode = document.createTextNode(text);
方法只有一個(gè)參數(shù):新建文本節(jié)點(diǎn)所包含的文本字符串
方法的返回值:是一個(gè)指向新建節(jié)點(diǎn)的引用指針。它是一個(gè)文本節(jié)點(diǎn),所以它的 nodeType 屬性等于 3.
新元素節(jié)點(diǎn)不會(huì)自動(dòng)添加到文檔里,新節(jié)點(diǎn)沒(méi)有 nodeParent 屬性
var pElementText=document.createElement("li");
var textElement=document.createTextNode("南京");
pElementText.appendChild(textElement);
插入節(jié)點(diǎn)(1)
appendChild()
為給定元素增加一個(gè)子節(jié)點(diǎn):
var newreference = element.appendChild(newChild).
給定子節(jié)點(diǎn) newChild 將成為給定元素節(jié)點(diǎn) element 的最后一個(gè)子節(jié)點(diǎn)。
方法的返回值是一個(gè)指向新增子節(jié)點(diǎn)的引用指針。
該方法通常與 createElement() createTextNode() 配合使用
新節(jié)點(diǎn)可以被追加給文檔中的任何一個(gè)元素
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);
插入節(jié)點(diǎn)(2)
insertBefore()
把一個(gè)給定節(jié)點(diǎn)插入到一個(gè)給定元素節(jié)點(diǎn)的給定子節(jié)點(diǎn)的前面
var reference = element.insertBefore(newNode,targetNode);
節(jié)點(diǎn) newNode 將被插入到元素節(jié)點(diǎn) element 中并出現(xiàn)在節(jié)點(diǎn) targetNode 的前面.
節(jié)點(diǎn) targetNode 必須是 element 元素的一個(gè)子節(jié)點(diǎn)。
該方法通常與 createElement() 和 createTextNode() 配合使用
<ul id="city"> <li value="beijing^" id="beijing">北京</li> </ul>
<ul id="city01"> <li value="shanghai^" id="shanghai">上海</li> </ul>
//獲取父節(jié)點(diǎn)
var parentCityNode=document.getElementById("city");
//獲取子節(jié)點(diǎn)
var beijingNode=document.getElementById("beijing");
var shanghaiNode=document.getElementById("shanghai");
//插入
parentCityNode.insertBefore(shanghaiNode,beijingNode);
<ul id="city">
<li value="beijing^" id="beijing">北京</li>
</ul>
//獲取父節(jié)點(diǎn)
var parentCityNode=document.getElementById("city");
//獲取子節(jié)點(diǎn)
var beijingNode=document.getElementById("beijing");
//創(chuàng)建節(jié)點(diǎn)newShanghaiNode
var newShanghaiNode=document.createElement("li");
//創(chuàng)建newShanghaiNode節(jié)點(diǎn)的文本節(jié)點(diǎn)
var newTextNode=document.createTextNode("上海");
//在創(chuàng)建的節(jié)點(diǎn)上增加文本
newShanghaiNode.appendChild(newTextNode);
//插入節(jié)點(diǎn)
parentCityNode.insertBefore(newShanghaiNode,beijingNode);
插入節(jié)點(diǎn)(3)
DOM 沒(méi)有提供 insertAfter() 方法
function insertAfter(newElement,targetElement){
//獲取目標(biāo)元素的父節(jié)點(diǎn)
var parentElement=targetElement.parentNode;
//如果目標(biāo)元素是最后一個(gè)元素,則新元素插入到目標(biāo)元素的后面
if(parentElement.lastChild==targetElement){
parentElement.appendChild(newElement);
}else{//如果目標(biāo)元素不是最后一個(gè)元素,則新元素插入到目標(biāo)元素的的
//下一個(gè)兄弟節(jié)點(diǎn)的前面,即目標(biāo)元素的后面
parentElement.insertBefore(newElement,targetElement.nextSibling);
}
}
刪除節(jié)點(diǎn)
removeChild()
從一個(gè)給定元素里刪除一個(gè)子節(jié)點(diǎn)
var reference = element.removeChild(node);
返回值是一個(gè)指向已被刪除的子節(jié)點(diǎn)的引用指針。
某個(gè)節(jié)點(diǎn)被removeChild()方法刪除時(shí),這個(gè)節(jié)點(diǎn)所包含的所有子節(jié)點(diǎn)將同時(shí)被刪除。
<ul id="city"> <li value="beijing^" id="beijing">北京</li> </ul>
var ulElement=document.getElementById("city");
var liElement=document.getElementById("beijing");
ulElement.removeChild(liElement);
如果想刪除某個(gè)節(jié)點(diǎn),但不知道它的父節(jié)點(diǎn)是哪一個(gè),parentNode 屬性可以幫忙。
<ul id="city"> <li value="beijing^" id="beijing">北京</li> </ul>
var liElement=document.getElementById("beijing");
var parentElement=liElement.parentNode;
parentElement.removeChild(liElement);
遍歷節(jié)點(diǎn)樹(shù)
ChildNodes:返回一個(gè)數(shù)組,這個(gè)數(shù)組由給定元素節(jié)點(diǎn)的子節(jié)點(diǎn)構(gòu)成:
var nodeList = node.childNodes;
文本節(jié)點(diǎn)和屬性節(jié)點(diǎn)都不可能再包含任何子節(jié)點(diǎn),所以它們的 ChildNodes 屬性永遠(yuǎn)會(huì)返回一個(gè)空數(shù)組。
如果想知道某個(gè)元素有沒(méi)有子節(jié)點(diǎn),可以用 hasChildNodes 方法。
如果想知道某個(gè)元素有多少個(gè)子節(jié)點(diǎn),可以用 childNodes 數(shù)組的 length 屬性。
childNodes 屬性是一個(gè)只讀屬性。
獲取第一個(gè)子節(jié)點(diǎn)
firstChild:該屬性返回一個(gè)給定元素節(jié)點(diǎn)的第一個(gè)子節(jié)點(diǎn),返回這個(gè)節(jié)點(diǎn)對(duì)象的指針。
var reference = node.firstChild;
文本節(jié)點(diǎn)和屬性節(jié)點(diǎn)都不可能包含任何子節(jié)點(diǎn),所以它們的 firstChild 屬性永遠(yuǎn)會(huì)返回 null。
某個(gè)元素的 firstChild 屬性等價(jià)于這個(gè)元素的 childNodes 節(jié)點(diǎn)集合中的第一個(gè)節(jié)點(diǎn),即:
var reference = node.ChildNodes[0];
firstChild 屬性是一個(gè)只讀屬性。
獲取最后一個(gè)子節(jié)點(diǎn)
lastChild:對(duì)應(yīng) firstChild 的一個(gè)屬性。
nextSibling: 返回一個(gè)給定節(jié)點(diǎn)的下一個(gè)兄弟節(jié)點(diǎn)。
parentNode:返回一個(gè)給定節(jié)點(diǎn)的父節(jié)點(diǎn)。
parentNode 屬性返回的節(jié)點(diǎn)永遠(yuǎn)是一個(gè)元素節(jié)點(diǎn),因?yàn)橹挥性毓?jié)點(diǎn)才有可能包含子節(jié)點(diǎn)。
document 節(jié)點(diǎn)的沒(méi)有父節(jié)點(diǎn)。
previousSibling:返回一個(gè)給定節(jié)點(diǎn)的上一個(gè)兄弟節(jié)點(diǎn)
innerHTML屬性
瀏覽器幾乎都支持該屬性,但不是 DOM 標(biāo)準(zhǔn)的組成部分。
innerHTML 屬性可以用來(lái)讀,寫某給定元素里的 HTML 內(nèi)容。
<div id="city"></div>
var divElement=document.getElementById("city");
divElement.innerHTML="<li value='beijing^'' id='beijing'>北京</li>";
顯示彈出窗口(方案一)
語(yǔ)法:
vReturnValue = window . showModalDialog ( sURL,
vArguments , sFeatures )
參數(shù)說(shuō)明:
sURL--必選參數(shù),用來(lái)指定對(duì)話框要顯示的文檔的URL。
vArguments--可選參數(shù),用來(lái)向?qū)υ捒騻鬟f參數(shù)。傳遞的參數(shù)類型不限,包括數(shù)組等。對(duì)話框通過(guò)window.dialogArguments來(lái)取得傳遞進(jìn)來(lái)的參數(shù)。
sFeatures--可選參數(shù),用來(lái)描述對(duì)話框的外觀等信息,可以使用一個(gè)或幾個(gè),用分號(hào)“;”隔開(kāi)。
顯示彈出窗口(方案二)
window.opener 的用法
window.opener 返回的是創(chuàng)建當(dāng)前窗口的那個(gè)窗口的引用,比如點(diǎn)擊了a.htm上的一個(gè)鏈接而打開(kāi)了b.htm,然后我們打算在b.htm上輸入一個(gè)值然后賦予a.htm上的一個(gè)id為“name”的text中,就可以寫為:
window.opener.document.getElementById("name").value = "輸入的數(shù)據(jù)";
聯(lián)系客服