您好,登錄后才能下訂單哦!
小編給大家分享一下jQuery中attr和prop方法有什么不同,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
相比 attr,prop 是 1.6.1 才新出來的,二者從中文意思理解,都是獲得/設置屬性的方法(attributes 和 properties)。只是,window 或 document 中使用 .attr() 方法在 jQuery1.6 之前不能正常運行,由于 window 和 document 中不能有 attributes。prop 應運而生了。
之前看網上對照二者的文章,更是列出一個表來辨別什么標簽下使用 prop,什么標簽下使用 attr,諒解我是怠惰的人,最懼怕要背的東西,所以只有自己想一想辦法了。
既然我們想知道他們兩的區分,最好就看看他們的源代碼,不要被代碼長度所嚇到,我們只看關鍵的幾句:
attr 方法代碼(jQuery 版本 1.8.3)
attr: function( elem, name, value, pass ) {var ret, hooks, notxml,nType = elem.nodeType;// don't get/set attributes on text, comment and attribute nodesif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {return;}if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {return jQuery( elem )[ name ]( value );}// Fallback to prop when attributes are not supportedif ( typeof elem.getAttribute === "undefined" ) {return jQuery.prop( elem, name, value );}notxml = nType !== 1 || !jQuery.isXMLDoc( elem );// All attributes are lowercase// Grab necessary hook if one is definedif ( notxml ) {name = name.toLowerCase();hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook );}if ( value !== undefined ) {if ( value === null ) {jQuery.removeAttr( elem, name );return;} else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) {return ret;} else {elem.setAttribute( name, value + "" );return value;}} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) {return ret;} else {ret = elem.getAttribute( name );// Non-existent attributes return null, we normalize to undefinedreturn ret === null ?undefined :ret;}}
prop 方法代碼(jQuery 版本1.8.3)
prop: function( elem, name, value ) {var ret, hooks, notxml,nType = elem.nodeType;// don't get/set properties on text, comment and attribute nodesif ( !elem || nType === 3 || nType === 8 || nType === 2 ) {return;}notxml = nType !== 1 || !jQuery.isXMLDoc( elem );if ( notxml ) {// Fix name and attach hooksname = jQuery.propFix[ name ] || name;hooks = jQuery.propHooks[ name ];}if ( value !== undefined ) {if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) {return ret;} else {return ( elem[ name ] = value );}} else {if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) {return ret;} else {return elem[ name ];}}}
attr 方法里面,最關鍵的兩行代碼,elem.setAttribute( name, value + “” )和 ret = elem.getAttribute( name ),很明顯的看出來,使用的 DOM 的 API setAttribute 和 getAttribute 方法操作的屬性元素節點。
而 prop 方法里面,最關鍵的兩行代碼,return ( elem[ name ] = value )和 return elem[ name ],你可以理解成這樣document.getElementById(el)[name] = value,這是轉化成 JS 對象的一個屬性。
以上是“jQuery中attr和prop方法有什么不同”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。