比如:
<p id="test"><strong><font color="red">Hello</font> , world!</strong></p>
我們使用代碼:alert((document.getElementById("test")).innerText)
在IE、Chrome中,均能獲取到“Hello , world!”,但是在Firefox中,卻得到了"undefined"。其原為是firefox中並不支持元素的innerText這個屬性。當然,在網絡上已經有很多好的方法來解決這個問題了,比如給HTMLElement原型添加一個屬性(讀取器)。
然而,所有文本節點都具有nodeValue屬性,而且所有浏覽器都是支持的。我們可以嘗試用這種方法去讀取一個HTML元素內的文本。
下面的原碼,正好解決了這個問題:
復制代碼 代碼如下:
function getText(e) {
//若浏覽器支持元素的innerText屬性,則直接返回該屬性
if(e.innerText) { return e.innerText; }
//不支持innerText屬性時,用以下方法處理
var t = "";
//如果傳入的是一個元素對象,則繼續訪問其子元素
e = e.childNodes || e ;
//遍歷子元素的所有子元素
for(var i=0; i<e.length; i++) {
//若為文本元素,則累加到字符串t中。
if(e[i].nodeType == 3) { t += e[i].nodeValue; }
//否則遞歸遍歷元素的所有子節點
else { t += getText(e[i].childNodes); }
}
return t;
}
有了這個函數,我們再來看看如下DOM結構:
<p id="test"><strong><font color="red">Hello</font> , world!</strong></p>
然後,我們用:
alert(getText(document.getElementById("test"));
在IE、Chrome、Firefox中均能獲取到 "Hello, world!"