?? ?摘自 http://hi.baidu.com/ashuy/blog/item/69a25f60327d96dd8cb10d0f.html
?? ?Firefox同樣支持W3C標(biāo)準(zhǔn)屬性,包括childNodes、firstChild、lastChild、nextSibling、 nodeName、nodeType、nodeValue、ownerDocument、parentNode和previousSibling。不幸的是,對(duì)于微軟專(zhuān)有的text和xml屬性,F(xiàn)irefox并不支持,不過(guò)可以利用其他方法來(lái)模擬該屬性的行為。
?? ?大家應(yīng)該還記得,text屬性返回了當(dāng)前節(jié)點(diǎn)的內(nèi)容,或者是當(dāng)前節(jié)點(diǎn)及其子節(jié)點(diǎn)的內(nèi)容。這不僅僅返回當(dāng)前節(jié)點(diǎn)的文本,還有所有子節(jié)點(diǎn)的文本,因此要模擬該功能實(shí)現(xiàn)是十分容易的。下面這個(gè)簡(jiǎn)單的函數(shù)就能夠完成該功能,該函數(shù)唯一的參數(shù)是一個(gè)節(jié)點(diǎn):
function getText(oNode) {
?? ?var sText = "";
?? ?for (var i = 0; i < oNode.childNodes.length; i++) {
?? ??? ?if (oNode.childNodes[i].hasChildNodes()) {
?? ??? ??? ?sText += getText(oNode.childNodes[i]);
?? ??? ?} else {
?? ??? ??? ?sText += oNode.childNodes[i].nodeValue;
?? ??? ?}
?? ????}
?? ?return sText;
}
?? ?在getText()函數(shù)中,sText變量用來(lái)保存獲取的所有文本。接著對(duì)oNode的子節(jié)點(diǎn)使用for循環(huán)進(jìn)行遍歷,檢查每個(gè)子節(jié)點(diǎn)是否包含子節(jié)點(diǎn)。如果有子節(jié)點(diǎn),那么就將其childNode傳給getText()函數(shù),并進(jìn)行同樣的處理;如果沒(méi)有子節(jié)點(diǎn),那么將當(dāng)前節(jié)點(diǎn)的nodeValue 加到字符串中(對(duì)文本節(jié)點(diǎn)而言,這只是文本字符串)。處理了所有子節(jié)點(diǎn)后,該函數(shù)返回變量sText。