[JS]jQuery中attr和prop方法的區(qū)別
來源:程序員人生 發(fā)布時間:2015-02-24 21:30:27 閱讀次數(shù):4666次
相比attr,prop是1.6.1才新出來的,二者從中文意思理解,都是獲得/設(shè)置屬性的方法(attributes和properties)。只是,window或document中使用.attr()方法在jQuery1.6之前不能正常運(yùn)行,由于window和document中不能有attributes。prop應(yīng)運(yùn)而生了。
之前看網(wǎng)上對照二者的文章,更是列出1個表來辨別甚么標(biāo)簽下使用prop,甚么標(biāo)簽下使用attr,諒解我是怠惰的人,最懼怕要背的東西,所以只有自己想一想辦法了。
既然我們想知道他們兩的區(qū)分,最好就看看他們的源代碼,不要被代碼長度所嚇到,我們只看關(guān)鍵的幾句:
attr方法代碼(jQuery版本1.8.3)
- attr: function( elem, name, value, pass ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
- if ( pass && jQuery.isFunction( jQuery.fn[ name ] ) ) {
- return jQuery( elem )[ name ]( value );
- }
-
- if ( typeof elem.getAttribute === "undefined" ) {
- return jQuery.prop( elem, name, value );
- }
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
-
-
- if ( 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 );
-
- return ret === null ?
- undefined :
- ret;
- }
- }
prop方法代碼(jQuery版本1.8.3)
- prop: function( elem, name, value ) {
- var ret, hooks, notxml,
- nType = elem.nodeType;
-
- if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {
- return;
- }
- notxml = nType !== 1 || !jQuery.isXMLDoc( elem );
- if ( notxml ) {
-
- name = 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方法里面,最關(guān)鍵的兩行代碼,elem.setAttribute( name, value + “” )和ret = elem.getAttribute( name ),很明顯的看出來,使用的DOM的API setAttribute和getAttribute方法操作的屬性元素節(jié)點(diǎn)。
而prop方法里面,最關(guān)鍵的兩行代碼,return ( elem[ name ] = value )和return elem[ name ],你可以理解成這樣document.getElementById(el)[name] = value,這是轉(zhuǎn)化成JS對象的1個屬性。
既然明白了原理是這樣,我們來看看1個例子:
- <input type=
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
------分隔線----------------------------
------分隔線----------------------------