javascript獲取網(wǎng)頁(yè)中指定節(jié)點(diǎn)的父節(jié)點(diǎn)、子節(jié)點(diǎn)的方法小結(jié)
更新時(shí)間:2013年04月24日 11:43:57 作者:
如何獲取要更新的這些元素呢?用JavaScript獲取這些節(jié)點(diǎn)的方法有很多種,下面是總結(jié)的一些方法,感興趣的朋友可以參考下哈
我們?cè)趯?shí)際的開發(fā)當(dāng)中經(jīng)常要獲取頁(yè)面中某個(gè)html元素,動(dòng)態(tài)的更新該元素的樣式、內(nèi)容屬性等。
那么如何獲取要更新的這些元素呢?用JavaScript獲取這些節(jié)點(diǎn)的方法有很多種,下面是總結(jié)的一些方法.
1. 通過(guò)document節(jié)點(diǎn)獲取:
(1) document.getElementById(elementId):該方法通過(guò)節(jié)點(diǎn)的ID,可以準(zhǔn)確獲得需要的元素,是比較簡(jiǎn)單快捷的方法。如果頁(yè)面上含有多個(gè)相同id的節(jié)點(diǎn),那么只返回第一個(gè)節(jié)點(diǎn)。
如 今,已經(jīng)出現(xiàn)了如prototype、Mootools等多個(gè)JavaScript庫(kù),它們提供了更簡(jiǎn)便的方法:$(id),參數(shù)仍然是節(jié)點(diǎn)的id。這個(gè) 方法可以看作是document.getElementById()的另外一種寫法,不過(guò)$()的功能更為強(qiáng)大,具體用法可以參考它們各自的API文檔。
(2)document.getElementsByName(elementName): 該方法是通過(guò)節(jié)點(diǎn)的name獲取節(jié)點(diǎn),從名字可以看出,這個(gè)方法返回的不是一個(gè)節(jié)點(diǎn)元素,而是具有同樣名稱的節(jié)點(diǎn)數(shù)組。然后,我們可以通過(guò)要獲取節(jié)點(diǎn)的某 個(gè)屬性來(lái)循環(huán)判斷是否為需要的節(jié)點(diǎn)。
例如:在HTML中checkbox和radio都是通過(guò)相同的name屬性值,來(lái)標(biāo)識(shí)一個(gè)組內(nèi)的元素。如果我們現(xiàn)在要獲取被選中的元素,首先獲取改組元素,然后循環(huán)判斷是節(jié)點(diǎn)的checked屬性值是否為true即可。
(3)document.getElementsByTagName(tagName): 該方法是通過(guò)節(jié)點(diǎn)的Tag獲取節(jié)點(diǎn),同樣該方法也是返回一個(gè)數(shù)組,例如:document.getElementsByTagName('A')將會(huì)返回 頁(yè)面上所有超鏈接節(jié)點(diǎn)。在獲取節(jié)點(diǎn)之前,一般都是知道節(jié)點(diǎn)的類型的,所以使用該方法比較簡(jiǎn)單。但是缺點(diǎn)也是顯而易見(jiàn),那就是返回的數(shù)組可能十分龐大,這樣 就會(huì)浪費(fèi)很多時(shí)間。那么,這個(gè)方法是不是就沒(méi)有用處了呢?當(dāng)然不是,這個(gè)方法和上面的兩個(gè)不同,它不是document節(jié)點(diǎn)的專有方法,還可以應(yīng)用其他的 節(jié)點(diǎn),下面將會(huì)提到。
2、通過(guò)父節(jié)點(diǎn)獲取:
(1)parentObj.firstChild:如果節(jié)點(diǎn)為已知節(jié)點(diǎn) (parentObj)的第一個(gè)子節(jié)點(diǎn)就可以使用這個(gè)方法。這個(gè)屬性是可以遞歸使用的,也就是支持 parentObj.firstChild.firstChild.firstChild...的形式,如此就可以獲得更深層次的節(jié)點(diǎn)。
(2)parentObj.lastChild:很顯然,這個(gè)屬性是獲取已知節(jié)點(diǎn)(parentObj)的最后一個(gè)子節(jié)點(diǎn)。與firstChild一樣,它也可以遞歸使用。
在使用中,如果我們把二者結(jié)合起來(lái),那么將會(huì)達(dá)到更加令人興奮的效果,即:parentObj.firstChild.lastChild.lastChild...
(3)parentObj.childNodes:獲取已知節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)組,然后可以通過(guò)循環(huán)或者索引找到需要的節(jié)點(diǎn)。
注意:經(jīng)測(cè)試發(fā)現(xiàn),在IE7上獲取的是直接子節(jié)點(diǎn)的數(shù)組,而在Firefox2.0.0.11上獲取的是所有子節(jié)點(diǎn)即包括子節(jié)點(diǎn)的子節(jié)點(diǎn)。
(4)parentObj.children:獲取已知節(jié)點(diǎn)的直接子節(jié)點(diǎn)數(shù)組。
注意:經(jīng)測(cè)試,在IE7上,和childNodes效果一樣,而Firefox2.0.0.11不支持。這也是為什么我要使用和其他方法不同樣式的原因。因此不建議使用。
(5)parentObj.getElementsByTagName(tagName): 使用方法不再贅述,它返回已知節(jié)點(diǎn)的所有子節(jié)點(diǎn)中類型為指定值的子節(jié)點(diǎn)數(shù)組。例 如:parentObj.getElementsByTagName('A')返回已知的子節(jié)點(diǎn)中的所有超鏈接。
3、通過(guò)臨近節(jié)點(diǎn)獲取:
(1)neighbourNode.previousSibling:獲取已知節(jié)點(diǎn)(neighbourNode)的前一個(gè)節(jié)點(diǎn),這個(gè)屬性和前面的firstChild、lastChild一樣都似乎可以遞歸使用的。
(2)neighbourNode.nextSibling:獲取已知節(jié)點(diǎn)(neighbourNode)的下一個(gè)節(jié)點(diǎn),同樣支持遞歸。
4、通過(guò)子節(jié)點(diǎn)獲取:
(1)childNode.parentNode:獲取已知節(jié)點(diǎn)的父節(jié)點(diǎn)。
上面提到的方法,只是一些基本的方法,如果使用了Prototype等JavaScript庫(kù),可能還獲得其他不同的方法,例如通過(guò)節(jié)點(diǎn)的class獲取等等。不過(guò),如果能夠靈活運(yùn)用上面的各種方法,相信應(yīng)該可以應(yīng)付大部分的程序
那么如何獲取要更新的這些元素呢?用JavaScript獲取這些節(jié)點(diǎn)的方法有很多種,下面是總結(jié)的一些方法.
1. 通過(guò)document節(jié)點(diǎn)獲取:
(1) document.getElementById(elementId):該方法通過(guò)節(jié)點(diǎn)的ID,可以準(zhǔn)確獲得需要的元素,是比較簡(jiǎn)單快捷的方法。如果頁(yè)面上含有多個(gè)相同id的節(jié)點(diǎn),那么只返回第一個(gè)節(jié)點(diǎn)。
如 今,已經(jīng)出現(xiàn)了如prototype、Mootools等多個(gè)JavaScript庫(kù),它們提供了更簡(jiǎn)便的方法:$(id),參數(shù)仍然是節(jié)點(diǎn)的id。這個(gè) 方法可以看作是document.getElementById()的另外一種寫法,不過(guò)$()的功能更為強(qiáng)大,具體用法可以參考它們各自的API文檔。
(2)document.getElementsByName(elementName): 該方法是通過(guò)節(jié)點(diǎn)的name獲取節(jié)點(diǎn),從名字可以看出,這個(gè)方法返回的不是一個(gè)節(jié)點(diǎn)元素,而是具有同樣名稱的節(jié)點(diǎn)數(shù)組。然后,我們可以通過(guò)要獲取節(jié)點(diǎn)的某 個(gè)屬性來(lái)循環(huán)判斷是否為需要的節(jié)點(diǎn)。
例如:在HTML中checkbox和radio都是通過(guò)相同的name屬性值,來(lái)標(biāo)識(shí)一個(gè)組內(nèi)的元素。如果我們現(xiàn)在要獲取被選中的元素,首先獲取改組元素,然后循環(huán)判斷是節(jié)點(diǎn)的checked屬性值是否為true即可。
(3)document.getElementsByTagName(tagName): 該方法是通過(guò)節(jié)點(diǎn)的Tag獲取節(jié)點(diǎn),同樣該方法也是返回一個(gè)數(shù)組,例如:document.getElementsByTagName('A')將會(huì)返回 頁(yè)面上所有超鏈接節(jié)點(diǎn)。在獲取節(jié)點(diǎn)之前,一般都是知道節(jié)點(diǎn)的類型的,所以使用該方法比較簡(jiǎn)單。但是缺點(diǎn)也是顯而易見(jiàn),那就是返回的數(shù)組可能十分龐大,這樣 就會(huì)浪費(fèi)很多時(shí)間。那么,這個(gè)方法是不是就沒(méi)有用處了呢?當(dāng)然不是,這個(gè)方法和上面的兩個(gè)不同,它不是document節(jié)點(diǎn)的專有方法,還可以應(yīng)用其他的 節(jié)點(diǎn),下面將會(huì)提到。
2、通過(guò)父節(jié)點(diǎn)獲取:
(1)parentObj.firstChild:如果節(jié)點(diǎn)為已知節(jié)點(diǎn) (parentObj)的第一個(gè)子節(jié)點(diǎn)就可以使用這個(gè)方法。這個(gè)屬性是可以遞歸使用的,也就是支持 parentObj.firstChild.firstChild.firstChild...的形式,如此就可以獲得更深層次的節(jié)點(diǎn)。
(2)parentObj.lastChild:很顯然,這個(gè)屬性是獲取已知節(jié)點(diǎn)(parentObj)的最后一個(gè)子節(jié)點(diǎn)。與firstChild一樣,它也可以遞歸使用。
在使用中,如果我們把二者結(jié)合起來(lái),那么將會(huì)達(dá)到更加令人興奮的效果,即:parentObj.firstChild.lastChild.lastChild...
(3)parentObj.childNodes:獲取已知節(jié)點(diǎn)的子節(jié)點(diǎn)數(shù)組,然后可以通過(guò)循環(huán)或者索引找到需要的節(jié)點(diǎn)。
注意:經(jīng)測(cè)試發(fā)現(xiàn),在IE7上獲取的是直接子節(jié)點(diǎn)的數(shù)組,而在Firefox2.0.0.11上獲取的是所有子節(jié)點(diǎn)即包括子節(jié)點(diǎn)的子節(jié)點(diǎn)。
(4)parentObj.children:獲取已知節(jié)點(diǎn)的直接子節(jié)點(diǎn)數(shù)組。
注意:經(jīng)測(cè)試,在IE7上,和childNodes效果一樣,而Firefox2.0.0.11不支持。這也是為什么我要使用和其他方法不同樣式的原因。因此不建議使用。
(5)parentObj.getElementsByTagName(tagName): 使用方法不再贅述,它返回已知節(jié)點(diǎn)的所有子節(jié)點(diǎn)中類型為指定值的子節(jié)點(diǎn)數(shù)組。例 如:parentObj.getElementsByTagName('A')返回已知的子節(jié)點(diǎn)中的所有超鏈接。
3、通過(guò)臨近節(jié)點(diǎn)獲取:
(1)neighbourNode.previousSibling:獲取已知節(jié)點(diǎn)(neighbourNode)的前一個(gè)節(jié)點(diǎn),這個(gè)屬性和前面的firstChild、lastChild一樣都似乎可以遞歸使用的。
(2)neighbourNode.nextSibling:獲取已知節(jié)點(diǎn)(neighbourNode)的下一個(gè)節(jié)點(diǎn),同樣支持遞歸。
4、通過(guò)子節(jié)點(diǎn)獲取:
(1)childNode.parentNode:獲取已知節(jié)點(diǎn)的父節(jié)點(diǎn)。
上面提到的方法,只是一些基本的方法,如果使用了Prototype等JavaScript庫(kù),可能還獲得其他不同的方法,例如通過(guò)節(jié)點(diǎn)的class獲取等等。不過(guò),如果能夠靈活運(yùn)用上面的各種方法,相信應(yīng)該可以應(yīng)付大部分的程序
您可能感興趣的文章:
- JS 使用for循環(huán)遍歷子節(jié)點(diǎn)查找元素
- js查找父節(jié)點(diǎn)的簡(jiǎn)單方法
- javascript下查找父節(jié)點(diǎn)的簡(jiǎn)單方法
- js查找節(jié)點(diǎn)的方法小結(jié)
- JS常見(jiàn)DOM節(jié)點(diǎn)操作示例【創(chuàng)建 ,插入,刪除,復(fù)制,查找】
- javascript基礎(chǔ)之查找元素的詳細(xì)介紹(訪問(wèn)節(jié)點(diǎn))
- js遍歷子節(jié)點(diǎn)子元素附屬性及方法
- javascript 節(jié)點(diǎn)遍歷函數(shù)
- JS獲取子節(jié)點(diǎn)、父節(jié)點(diǎn)和兄弟節(jié)點(diǎn)的方法實(shí)例總結(jié)
- javascript得到XML某節(jié)點(diǎn)的子節(jié)點(diǎn)個(gè)數(shù)的腳本
- JS查找孩子節(jié)點(diǎn)簡(jiǎn)單示例
相關(guān)文章
Moment.js 不容錯(cuò)過(guò)的超棒Javascript日期處理類庫(kù)
moment.js是一個(gè)輕量級(jí)并且健壯的js日期處理類庫(kù),相信大家在javascript開發(fā)過(guò)程中,都自己動(dòng)手寫過(guò),或者使用google和百度搜索過(guò)相關(guān)的實(shí)現(xiàn)函數(shù)2012-04-04
JavaScript擴(kuò)展運(yùn)算符的學(xué)習(xí)及應(yīng)用詳情(ES6)
這篇文章主要介紹了JavaScript擴(kuò)展運(yùn)算符的學(xué)習(xí)及應(yīng)用詳情(ES6),擴(kuò)展運(yùn)算符是ES6新增的一種運(yùn)算符,他可以幫助我們簡(jiǎn)化代碼,簡(jiǎn)化操作,具體相關(guān)知識(shí)感興趣的小伙伴可以查看下面文章的簡(jiǎn)單介紹2022-08-08
js動(dòng)態(tài)添加表格數(shù)據(jù)使用insertRow和insertCell實(shí)現(xiàn)
這篇文章主要介紹了js動(dòng)態(tài)添加表格數(shù)據(jù)并使用insertRow和insertCell實(shí)現(xiàn),需要的朋友可以參考下2014-05-05
JS 中可以提升幸福度的小技巧(可以識(shí)別更多另類寫法)
本文主要介紹一些JS中用到的小技巧,可以在日常Coding中提升幸福度,將不定期更新2018-07-07
使用JavaScript字符串解決回文數(shù)的方案詳解
這篇文章主要介紹了使用JavaScript字符串解決回文數(shù)的方案,JavaScript中的字符串是一種數(shù)據(jù)類型,用于表示文本數(shù)據(jù),字符串可以包含任意字符序列,包括字母、數(shù)字、符號(hào)和空格,靈活掌握字符串的解決問(wèn)題思想,巧用字符串解決回文數(shù),需要的朋友可以參考下2024-05-05

