在JavaScript中對文字編輯也是經(jīng)常,通常標(biāo)簽不復(fù)雜性況下,我們也可以直接對標(biāo)簽內(nèi)的容進(jìn)行讀取和修改操作,介于兼容性不是很理想前提下,我們先來了解下相關(guān)的方法及其他瀏覽器中替代的方法,結(jié)合實例讓大家快掌握及投入到實際工作中。
? ? ? ?1.innerText屬性
通過innertText屬性可以操作元素中包含的所有文本內(nèi)容,無論文本位于子文檔樹中的什么位置。在通過innerText讀取值時,它會按照由淺入深的順序,將子文檔樹中的所有文本拼接起來。以下面的HTML代碼為例:
? ? ? ?
This is aparagraph with a list following it.
? ? ? ?
- ltem l
- ltem 2
- ltem 3
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?對于這個例子中的
元素而言,其innerText屬性會返回下列字符串:
? ? ? ?This is a paragraph with a list following it.
? ? ? ?Item l
? ? ? ?Item 2
? ? ? ?Item 3
? ? ? ?由于不同瀏覽器處理空白符的方式不同,因此輸出的文本可能會也可能不會包含原始HTML代碼中的縮進(jìn)。
使用innerText屬性設(shè)置這個
? ? ? ?設(shè)置innerText永遠(yuǎn)只會生成當(dāng)前節(jié)點的一個子文本節(jié)點,而為了確保只生成一個子文本節(jié)點, 就必須要對文本進(jìn)行HTML編碼。此外,還可利用innerText屬性過濾掉HTML標(biāo)簽。方法是將 innerText設(shè)置為等于innerText,這樣就可以去掉所有HTML標(biāo)簽,如下所示:
? ? ? ?div.innerText=div.innerText:
? ? ? ?執(zhí)行這行代碼的結(jié)果就是用原來的文本替換容器元素中的所有內(nèi)容。 ? ? ? ?在此,南昌網(wǎng)站制作公司百恒網(wǎng)絡(luò)開發(fā)工程師提示大家IE、Safari、Opera和Chrome支持innerText屬性。Firefox雖然不支持innerText,但支持作用類似的textContent屬性。textContent是DOM3級規(guī)定的一個屬性,而且也得到了Safari、Opera 和Chrome的支持。為了確??鐬g覽器兼容,有必要像下面這樣通過函數(shù)來檢測可以使用哪個屬性:
function getInnerText(element){
? ? ? ?return ( typeof element.textContent=="string") ?
? ? ? ? ? ? ? element.textContent : element.innerText:
? ? ? ?}
function setInnerText(element, text){
? ? ? ?if (typeof element.textContent== "string"){
? ? ? ? ? ? ? element.textContent=text:
? ? ? ?} else {
? ? ? ? ? ? ? element.innerText=text:
? ? ? ?}
}
? ? ? ?這兩個函數(shù)都接受一個元素,然后檢查這個元素是不是有textContent屬性。如果有,那么type of element.textContent應(yīng)該是"string";如果沒有,那么這兩個函數(shù)就會改為使用innerText,可以像下面這樣調(diào)用這兩個函數(shù):
? ? ? ?setInnerText( div, "Hello worldl“);
? ? ? ?alert( getinnerText (div)); //"Hello world!"
使用這兩個函數(shù)可以確保在不同的瀏覽器中使用正確的屬性。
2.innerHTML屬性
? ? ? ?innerHTML與innerText在很多方面都很相似。在讀取信息時,innerHTML返回當(dāng)前元素所有子節(jié)點的HTML表現(xiàn),包括元素、注釋及文本節(jié)點。在寫入信息時,innerHTML會按照指定的值創(chuàng)建新的DOM子樹,并以該子樹替換當(dāng)前元素的所有子節(jié)點。提到innerHTML與innerText之間最 主要的區(qū)別,無非就是innerHTML處理的是HTML字符串,而innerText處理的是普通文本字符串。
以下面的HTML代碼為例:
? ? ? ?
< /div>
這里面
? ? ? ?This is a paragraph with a list following it.
? ? ? ?Item l
? ? ? ?Item 2
? ? ? ?Item 3
? ? ? ?由于不同瀏覽器處理空白符的方式不同,因此輸出的文本可能會也可能不會包含原始HTML代碼中的縮進(jìn)。
使用innerText屬性設(shè)置這個
元素的內(nèi)容,則只需一行代碼:
? ? ? ?div.innerText="Hello world!;
? ? ? ?執(zhí)行這行代碼后,頁面的HTML代碼就會變成如下所示:
? ? ? ?
? ? ? ?可見,設(shè)置innerText屬性移除了先前存在的所有子節(jié)點,完全改變了DOM子樹。此外,通過設(shè)置innerText屬性還可以對所有出現(xiàn)在文本中的HTML語法字符(小于號、大干號、引號及和號)進(jìn)行編碼。例如,下面的這行代碼:
? ? ? ?div.innerText="Hello&welcome, "reader"!";
? ? ? ?運(yùn)行之后的結(jié)果如下:
? ? ? ?< div id=‘’content">Hello & welcome,<b>" reader"!< /b>
? ? ? ?div.innerText="Hello world!;
? ? ? ?執(zhí)行這行代碼后,頁面的HTML代碼就會變成如下所示:
? ? ? ?
Hello world!
? ? ? ?可見,設(shè)置innerText屬性移除了先前存在的所有子節(jié)點,完全改變了DOM子樹。此外,通過設(shè)置innerText屬性還可以對所有出現(xiàn)在文本中的HTML語法字符(小于號、大干號、引號及和號)進(jìn)行編碼。例如,下面的這行代碼:
? ? ? ?div.innerText="Hello&welcome, "reader"!";
? ? ? ?運(yùn)行之后的結(jié)果如下:
? ? ? ?< div id=‘’content">Hello & welcome,<b>" reader"!< /b>
? ? ? ?設(shè)置innerText永遠(yuǎn)只會生成當(dāng)前節(jié)點的一個子文本節(jié)點,而為了確保只生成一個子文本節(jié)點, 就必須要對文本進(jìn)行HTML編碼。此外,還可利用innerText屬性過濾掉HTML標(biāo)簽。方法是將 innerText設(shè)置為等于innerText,這樣就可以去掉所有HTML標(biāo)簽,如下所示:
? ? ? ?div.innerText=div.innerText:
? ? ? ?執(zhí)行這行代碼的結(jié)果就是用原來的文本替換容器元素中的所有內(nèi)容。 ? ? ? ?在此,南昌網(wǎng)站制作公司百恒網(wǎng)絡(luò)開發(fā)工程師提示大家IE、Safari、Opera和Chrome支持innerText屬性。Firefox雖然不支持innerText,但支持作用類似的textContent屬性。textContent是DOM3級規(guī)定的一個屬性,而且也得到了Safari、Opera 和Chrome的支持。為了確??鐬g覽器兼容,有必要像下面這樣通過函數(shù)來檢測可以使用哪個屬性:
function getInnerText(element){
? ? ? ?return ( typeof element.textContent=="string") ?
? ? ? ? ? ? ? element.textContent : element.innerText:
? ? ? ?}
function setInnerText(element, text){
? ? ? ?if (typeof element.textContent== "string"){
? ? ? ? ? ? ? element.textContent=text:
? ? ? ?} else {
? ? ? ? ? ? ? element.innerText=text:
? ? ? ?}
}
? ? ? ?這兩個函數(shù)都接受一個元素,然后檢查這個元素是不是有textContent屬性。如果有,那么type of element.textContent應(yīng)該是"string";如果沒有,那么這兩個函數(shù)就會改為使用innerText,可以像下面這樣調(diào)用這兩個函數(shù):
? ? ? ?setInnerText( div, "Hello worldl“);
? ? ? ?alert( getinnerText (div)); //"Hello world!"
使用這兩個函數(shù)可以確保在不同的瀏覽器中使用正確的屬性。
2.innerHTML屬性
? ? ? ?innerHTML與innerText在很多方面都很相似。在讀取信息時,innerHTML返回當(dāng)前元素所有子節(jié)點的HTML表現(xiàn),包括元素、注釋及文本節(jié)點。在寫入信息時,innerHTML會按照指定的值創(chuàng)建新的DOM子樹,并以該子樹替換當(dāng)前元素的所有子節(jié)點。提到innerHTML與innerText之間最 主要的區(qū)別,無非就是innerHTML處理的是HTML字符串,而innerText處理的是普通文本字符串。
以下面的HTML代碼為例:
This is aparagraph with a list following it.
? ? ? ?
- ltem l
- ltem 2
- ltem 3
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ? ? ? ?
? ? ? ?
< /div>
這里面
元素的innerHTML屬性將返回下列字符串:
? ? ? ?在不同瀏覽器中,innerHTML返回的文本可能會有所不同。IE和Opera常常把所有標(biāo)簽轉(zhuǎn)換為大寫,而Safari、Chrome和Firefox則以文檔中指定的形式返回HTML-包括空格和縮進(jìn)。不要指望所有瀏覽器都會返回沒有絲毫差別的innerHTML值。
? ? ? ?在寫入信息時,innerHTML會將給定的字符串解析為DOM子樹,并用這個子樹替換所有的子節(jié) 點。由于賦給innerHTML的字符串會被當(dāng)作HTML,因此其中包含的所有標(biāo)簽都會按照瀏覽器處理 HTML的標(biāo)準(zhǔn)方式,被轉(zhuǎn)換成對應(yīng)的元素(同樣,這個過程也會因瀏覽器而異)。如果像下面這樣, 只設(shè)置簡單的文本,那么結(jié)果就如同設(shè)置innerText -樣:
? ? ? ?div.innerHTML="Hello world!":
? ? ? ?如果為innerHTML設(shè)置的字符串中包含HTML代碼,結(jié)果可能就會大不一樣了。區(qū)別就在于innerText會轉(zhuǎn)義HTML語法字符,而innerHTML會解析它們。來看下面的例子:
? ? ? ?div.innerHTML="Hello&welcome, \"reader"!";
? ? ? ?執(zhí)行這行代碼之后的結(jié)果是:
? ? ? ?
? ? ? ?在設(shè)置完innerHTML之后,馬上就可以像訪問文檔中的其他節(jié)點一樣訪問新生成的節(jié)點。
? ? ? ?設(shè)置innerHTML會導(dǎo)致瀏覽器將HTML字符串解析為對應(yīng)的DOM樹。換句話說,設(shè)置完innerHTML之后再讀取它,將會得到一個差別很大的字符串。這個字符串不再是原始的
HTML代碼,而是根據(jù)原始HTML字符串創(chuàng)建的DOM子樹經(jīng)過序列化之后的結(jié)果。
? ? ? ?innerHTML也有一些限制。首先,在多數(shù)瀏覽器中,通過innerHTML插入的
This is aparagraph with a list following it.
- ltem l
- ltem 2
- ltem 3
? ? ? ?
? ? ? ?
? ? ? ?
? ? ? ?在不同瀏覽器中,innerHTML返回的文本可能會有所不同。IE和Opera常常把所有標(biāo)簽轉(zhuǎn)換為大寫,而Safari、Chrome和Firefox則以文檔中指定的形式返回HTML-包括空格和縮進(jìn)。不要指望所有瀏覽器都會返回沒有絲毫差別的innerHTML值。
? ? ? ?在寫入信息時,innerHTML會將給定的字符串解析為DOM子樹,并用這個子樹替換所有的子節(jié) 點。由于賦給innerHTML的字符串會被當(dāng)作HTML,因此其中包含的所有標(biāo)簽都會按照瀏覽器處理 HTML的標(biāo)準(zhǔn)方式,被轉(zhuǎn)換成對應(yīng)的元素(同樣,這個過程也會因瀏覽器而異)。如果像下面這樣, 只設(shè)置簡單的文本,那么結(jié)果就如同設(shè)置innerText -樣:
? ? ? ?div.innerHTML="Hello world!":
? ? ? ?如果為innerHTML設(shè)置的字符串中包含HTML代碼,結(jié)果可能就會大不一樣了。區(qū)別就在于innerText會轉(zhuǎn)義HTML語法字符,而innerHTML會解析它們。來看下面的例子:
? ? ? ?div.innerHTML="Hello&welcome, \"reader"!";
? ? ? ?執(zhí)行這行代碼之后的結(jié)果是:
? ? ? ?
Hello & welcome, " reader"!
? ? ? ?在設(shè)置完innerHTML之后,馬上就可以像訪問文檔中的其他節(jié)點一樣訪問新生成的節(jié)點。
? ? ? ?設(shè)置innerHTML會導(dǎo)致瀏覽器將HTML字符串解析為對應(yīng)的DOM樹。換句話說,設(shè)置完innerHTML之后再讀取它,將會得到一個差別很大的字符串。這個字符串不再是原始的
HTML代碼,而是根據(jù)原始HTML字符串創(chuàng)建的DOM子樹經(jīng)過序列化之后的結(jié)果。
? ? ? ?innerHTML也有一些限制。首先,在多數(shù)瀏覽器中,通過innerHTML插入的