html()和innerHTML


在控制台用jQuery想獲取節點的html,不管是用 .html() 還是 innerHTML,總是報錯:

 

 

發現直接$()出來的是原生的元素對象,是DOM結構,而不是jquery對象:

 

 

輸出$,發現這不是jquery的$對象:

 

 

發生了什么?

答案在這里:Chrome控制台選擇器簡介

原來是瀏覽器提供了一個自己的 $ 和 $$ 對象,$ 就相當於是 document.querySelector(),$$ 相當於 document.querySelectorAll()

 

 

如果要用 jQuery 的 $ 就需要自己手動引入文件:

 

此時,就是我們常用的 jQuery 對象了:

 

 

 

$的問題解決了,說回正題, html() 和 innerHTML 該什么時候用?其實很簡單,只要我們明確 html() 是 jQuery 的方法,而 innerHTML 是 DOM 的屬性 就可以了。

用這個html結構做演示。

jquery對象可以使用html()

innerHTML 則不能用於 jQuery 對象,只能用於原生的DOM對象,因為它不是 jQuery 的屬性

 

可以看到 document.getElementById("intro") 和 $("#intro")[0] 是一樣的,都是 DOM,但是和 $("#intro") 不同,所以它們對應的方法也就不一樣了

 

那 html() 和 innerHTML 有什么關系嗎?來源碼中看一看。

來看 access 的第一和第二個參數,第一個是 this 對象,第二個是方法,方法中傳入 value,也就是我們要修改的內容。

第3行,把 this 對象通過索引的方式取出第一個 DOM 元素賦值給 elem,elem 是一個 DOM 對象

第7行,如果 value 為空,即我們調用了$().html()想獲取內容,因此直接返回元素內容 elem.innerHTML

第18行,如果 value 不為空,循環所有的 DOM 並給它們賦值,elem.innerHTML = value

其實就是 jQuery 使用了 innerHTML 來實現 html() 的功能,他們唯一的不同就是在適用對象上。

 1 html: function( value ) {  2     return access( this, function( value ) {  3         var elem = this[ 0 ] || {},  4             i = 0,  5             l = this.length;  6 
 7         if ( value === undefined && elem.nodeType === 1 ) {  8             return elem.innerHTML;  9  } 10 
11         // See if we can take a shortcut and just use innerHTML
12         if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
13             !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { 14 
15             value = jQuery.htmlPrefilter( value ); 16 
17             try { 18                 for ( ; i < l; i++ ) { 19                     elem = this[ i ] || {}; 20 
21                     // Remove element nodes and prevent memory leaks
22                     if ( elem.nodeType === 1 ) { 23                         jQuery.cleanData( getAll( elem, false ) ); 24                         elem.innerHTML = value; 25  } 26  } 27 
28                 elem = 0; 29 
30             // If using innerHTML throws an exception, use the fallback method
31             } catch ( e ) {} 32  } 33 
34         if ( elem ) { 35             this.empty().append( value ); 36  } 37     }, null, value, arguments.length ); 38 }

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM