您好,登錄后才能下訂單哦!
小編給大家分享一下innerHTML與jquery里html()有哪些區別,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
區別:1、html()可以設置tbody、tr這些只讀標簽,而innerHTML在低版本IE下不行,不可以賦值,賦值的話就腳本報錯;2、html()設置的script腳本會執行,innerHTML設置的script腳本不會執行。
InnerHtml() 與html( )的區別
1、html()可以設置tbody、tr這些只讀標簽,而innerHTML在低版本IE下不行
在一個 HTML 文檔中, 我們可以使用 .html() 方法來獲取任意一個元素的內容。 如果選擇器匹配多于一個的元素,那么只有第一個匹配元素的 HTML 內容會被獲取。
innerHTML 是從對象的起始位置到終止位置的全部內容,包括Html標簽
我原本一直以為innerHTML和jquery里的html其實是完全一樣的,jquery是多此一舉了,直到我遇到一次問題
看個示例:
var tbody=document.createElement('tbody'); tbody.innerHTML='<tr><td>IE下tbody的innerHTML是只讀的</td></tr>'; //在IE下報錯,目標對象錯誤
現在用jquery的html試試,
$(tbody).html('<tr><td>IE下tbody的innerHTML是只讀的</td></tr>');
發現IE下用jquery能正確顯示了,沒任何問題。
后來查閱資料才知道:
jQuery的html()做了些容錯處理,原生的Dom API innerHTML有些元素是不支持的,比如table tr等元素,IE下tbody、tr這些的innerHTML都是只讀的,不允許寫入,而在其他瀏覽器下則沒問題。
jquery里是用了try,catch來檢測,如果報錯則在catch里重新調用this.empty().append(value),是通過append來添加字符串的。
而IE里有些元素的innerHTML是只讀的:
在IE6,IE7,IE8,IE9里面 col, colGroup, frameSet, html, head, style,table, tBody, tFoot, tHead, title, tr 這幾個的innerHTML屬性是只讀的,不可以賦值,賦值的話就腳本報錯。IE10這些標簽的innerHTML改成可寫的了。
既然在IE6-IE9里這些標簽的innerHTML屬性是只讀的,那么我們盡量避免對這些標簽的innerHTML屬性賦值,比如說對table的innerHTML可以改為對table父元素(假設是p)的innerHTML屬性賦值。
2、html()設置的script腳本會執行,innerHTML設置的script腳本不會執行。
因為jQuery 會把強行讓參數字符串中的script 標簽生效(方式是create and replace),而.innerHTML賦值則不會。
$('#app').html('<script>alert(1)</script>') // 會彈出警告框 $('#app')[0].innerHTML = '<script>alert(1)</script>' // 不會彈出警告框 // ↑使用[0]將jquery對象轉為dom對象,只有dom對象才有innerHTML方法,jQuery沒有。
擴展資料:
html()函數的優點
看看innerHTML屬性的缺點,就知道jQuery中html()函數的優點了,它是兼容所有瀏覽的,不存在html5標簽不支持的問題,不存在href,src屬性被轉換的問題,不存在某些標簽設置不了html串的問題,總之就是一句話,用它基本就萬事無憂了,至少功能的實現上是這樣。
html()函數的缺點
看來jQuery的html()函數似乎完美無限了,其實不然,它的完美只表現它的功能上,它兼容了所有瀏覽器,包括IE。但偏偏也是IE,盡管兼容了,性能并不樂觀,如果使用html()函數設置大數據量的html串的話,那將是場災難。
在IE下,html()函數的性能到底低到什么程度?電腦的配置為"i5 四核,8G內存,IE9",測試了用html()函數設置2000行4列的table,其平均耗時達到27秒!具體什么原因導致html()在IE下這么慢,個人粗略看過源碼,覺得使用try方式是主要原因之一,有興趣的同學可以深入研究一下。
以上是“innerHTML與jquery里html()有哪些區別”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。