首頁 >web前端 >前端問答 >innerHTML與jquery裡html()的差別是什麼

innerHTML與jquery裡html()的差別是什麼

青灯夜游
青灯夜游原創
2020-12-18 16:14:553225瀏覽

區別:1、html()可以設定tbody、tr這些只讀標籤,而innerHTML在低版本IE下不行,不可以賦值,賦值的話就腳本報錯;2、html()設定的script腳本會執行,innerHTML設定的script腳本不會執行。

innerHTML與jquery裡html()的差別是什麼

推薦教學:jquery影片教學

InnerHtml() 與html( )的區別

1、html()可以設定tbody、tr這些只讀標籤,而innerHTML在低版本IE下不行

在一個HTML 文件中, 我們可以使用.html() 方法來取得任一元素的內容。如果選擇器符合多於一個的元素,那麼只有第一個符合元素的 HTML 內容會被取得。

innerHTML 是從物件的起始位置到終止位置的全部內容,包括Html標籤

我原本一直以為innerHTML和jquery裡的html其實是完全一樣的,jquery是多此一舉了,直到我遇到一次問題

看個範例:

var tbody=document.createElement('tbody');
tbody.innerHTML=&#39;<tr><td>IE下tbody的innerHTML是只读的</td></tr>&#39;; //在IE下报错,目标对象错误

現在用jquery的html試試,

$(tbody).html(&#39;<tr><td>IE下tbody的innerHTML是只读的</td></tr>&#39;);

發現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賦值則不會。

$(&#39;#app&#39;).html(&#39;<script>alert(1)</script>&#39;)  // 会弹出警告框
$(&#39;#app&#39;)[0].innerHTML = &#39;<script>alert(1)</script>&#39; // 不会弹出警告框
      // ↑使用[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()的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn