textarea這個(gè)節(jié)點(diǎn)很特殊。而因?yàn)檫@個(gè)節(jié)點(diǎn)特殊,所以在IE和其它瀏覽器下,對(duì)它的解釋不一樣,下面為大家介紹下關(guān)于Textarea的注意事項(xiàng)
為什么要特別提t(yī)extarea?因?yàn)槠鋵?shí)textarea這個(gè)節(jié)點(diǎn)很特殊。而因?yàn)檫@個(gè)節(jié)點(diǎn)特殊,所以在IE和其它瀏覽器下,對(duì)它的解釋不一樣。
賣一下關(guān)子,哈哈!其實(shí)主要原因是今天幫一個(gè)師兄修一個(gè)BUG,具體是因?yàn)閺姆?wù)器拉數(shù)據(jù)下來插進(jìn)textarea的時(shí)候失敗,這個(gè)情況只在IE出現(xiàn)。其它瀏覽器一切正常!
首先,為什么textarea特殊?在所有的表單插件里面,textarea的值是寫在兩個(gè)開閉標(biāo)簽之間的,所以它的值在DOM的角度可以看作是文本節(jié)點(diǎn),這是textarea特有的。也正因?yàn)檫@個(gè)特性,所以當(dāng)你修改它的innerHTML的值時(shí)你仍然可以改變textarea的文本,而IE雖然支持這樣做,卻不允許一件事:動(dòng)態(tài)插入一些html標(biāo)簽。
你不妨做一個(gè)實(shí)驗(yàn):
在IE下通過JS插入一段HTML代碼,用的是innerHTML屬性而不是value或者innerText。
IE9+我是沒有去測(cè)試,但是IE6、7、8都會(huì)報(bào)錯(cuò)。
估計(jì)是出于安全的原因,所以才不允許JS動(dòng)態(tài)插入html進(jìn)textarea,但細(xì)心的人可以發(fā)現(xiàn),其實(shí)如果你手動(dòng)鍵入html代碼的話,textarea是可以接受的。我想其實(shí)這經(jīng)歷了這樣一個(gè)過程:字符轉(zhuǎn)義。對(duì)的,這是唯一能夠解釋手動(dòng)輸入html代碼成功的原因了。
所以,在我看來,既然那么多的瀏覽器的textarea都不支持html的顯示,為何JS操作的時(shí)候還要用innerHTML屬性呢?也就是說無論你用value插入html代碼還是用innerHTML插入html代碼,它都不會(huì)解析后顯示(所以才會(huì)有富文本編輯器代替textarea),那么為什么不用value去設(shè)置textarea的值呢?
所以我認(rèn)為,設(shè)置textarea的值不應(yīng)該通過innerHTML(當(dāng)然更不可能是innerText,因?yàn)閒irefox的原因),而要通過value去設(shè)置。這一點(diǎn)是開發(fā)人員要注意的。因?yàn)樽罱吹囊恍┩拇a老喜歡用innerHTML。其實(shí)我認(rèn)為這都是要分場(chǎng)合的。