為什麼要特別提textarea?因為其實textarea這個節點很特別。而因為這個節點特殊,所以在IE和其它瀏覽器下,對它的解釋不一樣。
賣一下關子,哈哈!其實主要原因是今天幫一個師兄修一個BUG,具體是因為從伺服器拉資料下來插進textarea的時候失敗,這個情況只在IE出現。其它瀏覽器一切正常!
首先,為什麼textarea特殊?在所有的表單插件裡面,textarea的值是寫在兩個開閉標籤之間的,所以它的值在DOM的角度可以看作是文字節點,這是textarea特有的。也因為這個特性,所以當你修改它的innerHTML的值時你仍然可以改變textarea的文本,而IE雖然支援這樣做,卻不允許一件事:動態插入一些html標籤。
不妨做個實驗:
在IE下透過JS插入一段HTML程式碼,用的是innerHTML屬性而不是value或innerText。
IE9 我是沒有去測試,但IE6、7、8都會報錯。
估計是出於安全的原因,所以才不允許JS動態插入html進textarea,但細心的人可以發現,其實如果你手動鍵入html代碼的話,textarea是可以接受的。我想其實這經歷了這樣一個過程:字符轉義。對的,這是唯一能夠解釋手動輸入html程式碼成功的原因了。
所以,在我看來,既然那麼多的瀏覽器的textarea都不支援html的顯示,為何JS操作的時候還要用innerHTML屬性呢?也就是說無論你用value插入html程式碼或用innerHTML插入html程式碼,它都不會解析後顯示(所以才會有富文本編輯器來取代textarea),那為什麼不用value去設定textarea的值呢?
所以我認為,設定textarea的值不應該透過innerHTML(當然更不可能是innerText,因為firefox的原因),而要透過value去設定。這一點是開發人員要注意的。因為最近看的一些童鞋的程式碼老喜歡用innerHTML。其實我認為這都是要分場合的。