中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

JS中attr和prop屬性的區別以及優先選擇示例
來源:易賢網 閱讀:948 次 日期:2014-09-15 15:27:20
溫馨提示:易賢網小編為您整理了“JS中attr和prop屬性的區別以及優先選擇示例”,方便廣大網友查閱!

相比attr,prop是1.6.1才新出來的,兩者從中文意思理解,都是獲取/設置屬性的方法(attributes和properties)。只是,window或document中使用.attr()方法在jQuery1.6之前不能正常運行,因為window和document中不能有attributes。prop應運而生了。

既然我們想知道他們兩的區別,最好就看看他們的源代碼,不要被代碼長度所嚇到,我們只看關鍵的幾句:

attr: function( elem, name, value, pass ) {

var ret, hooks, notxml,

nType = elem.nodeType;

// don't get/set attributes on text, comment and attribute nodes

if ( !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 supported

if ( 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 defined

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 );

// Non-existent attributes return null, we normalize to undefined

return 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 nodes

if ( !elem || nType === 3 || nType === 8 || nType === 2 ) {

return;

}

notxml = nType !== 1 || !jQuery.isXMLDoc( elem );

if ( notxml ) {

// Fix name and attach hooks

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方法里面,最關鍵的兩行代碼,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對象的一個屬性。

既然明白了原理是這樣,我們來看看一個例子:

<input type="checkbox" id="test" abc="111" />

$(function(){

el = $("#test");

console.log(el.attr("style")); //undefined

console.log(el.prop("style")); //CSSStyleDeclaration對象

console.log(document.getElementById("test").style); //CSSStyleDeclaration對象

});

el.attr(“style”)輸出undefined,因為attr是獲取的這個對象屬性節點的值,很顯然此時沒有這個屬性節點,自然輸出undefined

el.prop(“style”)輸出CSSStyleDeclaration對象,對于一個DOM對象,是具有原生的style對象屬性的,所以輸出了style對象

至于document.getElementById(“test”).style和上面那條一樣

接著看:

el.attr("abc","111")

console.log(el.attr("abc")); //111

console.log(el.prop("abc")); //undefined

首先用attr方法給這個對象添加abc節點屬性,值為111,可以看到html的結構也變了

el.attr(“abc”)輸出結果為111,再正常不過了

el.prop(“abc”)輸出undefined,因為abc是在這個的屬性節點中,所以通過prop是取不到的

el.prop("abc", "222");

console.log(el.attr("abc")); //111

console.log(el.prop("abc")); //222

我們再用prop方法給這個對象設置了abc屬性,值為222,可以看到html的結構是沒有變化的。輸出的結果就不解釋了。

上面已經把原理講清楚了,什么時候用什么就可以自己把握了。

提一下,在遇到要獲取或設置checked,selected,readonly和disabled等屬性時,用prop方法顯然更好,比如像下面這樣:

<input type="checkbox" id="test" checked="checked" />

console.log(el.attr("checked")); //checked

console.log(el.prop("checked")); //true

console.log(el.attr("disabled")); //undefined

console.log(el.prop("disabled")); //false

顯然,布爾值比字符串值讓接下來的處理更合理。

PS一下,如果你有JS性能潔癖的話,顯然prop的性能更高,因為attr需要訪問DOM屬性節點,訪問DOM是最耗時的。這種情況適用于多選項全選和反選的情況。

大家都知道有的瀏覽器只要寫disabled,checked就可以了,而有的要寫成disabled = "disabled",checked="checked",比如用attr("checked")獲取checkbox的checked屬性時選中的時候可以取到值,值為"checked"但沒選中獲取值就是undefined。

jq提供新的方法“prop”來獲取這些屬性,就是來解決這個問題的,以前我們使用attr獲取checked屬性時返回"checked"和"",現在使用prop方法獲取屬性則統一返回true和false。

那么,什么時候使用attr(),什么時候使用prop()?

1.添加屬性名稱該屬性就會生效應該使用prop();

2.是有true,false兩個屬性使用prop();

3.其他則使用attr();

項目中jquery升級的時候大家要注意這點!

更多信息請查看IT技術專欄

更多信息請查看腳本欄目
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲成人影音| 国产日韩欧美精品综合| 欧美日韩国产一区精品一区| 激情亚洲成人| 免费日韩精品中文字幕视频在线| 精品动漫一区| 欧美成年人视频网站欧美| 亚洲区欧美区| 欧美日韩亚洲一区二区三区四区| 亚洲一区久久久| 国产日韩欧美一区| 老色批av在线精品| 亚洲每日在线| 国产啪精品视频| 欧美高清视频| 先锋影院在线亚洲| 亚洲国产你懂的| 欧美日韩一区二区在线| 午夜在线视频观看日韩17c| 国产专区综合网| 欧美日韩成人在线播放| 欧美一区二区三区播放老司机| 国内精品久久久久久久果冻传媒| 蜜桃av一区二区| 亚洲免费中文字幕| 永久免费精品影视网站| 欧美日韩免费一区二区三区视频| 翔田千里一区二区| 99热这里只有精品8| 国产一区二区观看| 欧美三区美女| 免费视频一区| 欧美制服丝袜| 午夜精品久久久久久久99热浪潮| 亚洲激情偷拍| 国产一区二区三区在线观看免费视频| 欧美日韩福利| 欧美粗暴jizz性欧美20| 久久久国产成人精品| 亚洲一区二区三区免费观看| 亚洲电影观看| 狠狠入ady亚洲精品| 国产嫩草影院久久久久| 国产精品国色综合久久| 欧美日韩麻豆| 欧美日韩成人免费| 欧美日韩国产丝袜另类| 欧美激情中文不卡| 欧美国产日韩免费| 欧美jizzhd精品欧美巨大免费| 久久av一区二区三区漫画| 亚洲字幕在线观看| 亚洲欧美日韩一区在线观看| 亚洲免费在线视频| 在线视频欧美精品| 亚洲免费视频一区二区| 午夜精品久久久久久久久久久| 亚洲欧美日韩专区| 欧美一级大片在线观看| 欧美一区二区私人影院日本| 欧美一区二区高清| 欧美一区二区三区在线看| 亚洲欧美中文另类| 欧美一区二区在线视频| 久久久久久网址| 欧美福利视频网站| 中文av一区特黄| 亚洲一区在线观看免费观看电影高清| 亚洲一区二区三区成人在线视频精品| 中日韩高清电影网| 先锋影音国产精品| 久久一日本道色综合久久| 久久在线精品| 欧美日韩成人在线| 国产精品久线观看视频| 国产日韩欧美高清| 亚洲国产视频直播| 亚洲影视综合| 老司机一区二区三区| 欧美日韩第一区| 国产欧美日韩视频一区二区| 激情综合色综合久久| 亚洲经典一区| 亚洲欧美日韩精品综合在线观看| 欧美一级大片在线观看| 欧美激情精品久久久久久大尺度| 欧美日本一区二区视频在线观看| 国产精品女主播在线观看| 一区二区三区在线高清| 亚洲视频在线看| 久久久久欧美精品| 欧美吻胸吃奶大尺度电影| 国产色爱av资源综合区| 日韩午夜在线播放| 久久久久国产精品麻豆ai换脸| 欧美va天堂在线| 国产精品激情偷乱一区二区∴| 国产日韩欧美一区| 夜久久久久久| 男人插女人欧美| 国产精品三级视频| 亚洲人成高清| 久久免费的精品国产v∧| 欧美性做爰猛烈叫床潮| 亚洲国产精品一区二区三区| 亚洲欧美在线视频观看| 欧美日本韩国| 亚洲国产成人精品女人久久久 | 欧美在线综合| 久久久久亚洲综合| 欧美日韩在线精品| 亚洲福利在线观看| 午夜在线观看免费一区| 欧美精品成人在线| 在线看片成人| 久久福利精品| 国产精品尤物| 亚洲视频第一页| 欧美国产日韩一区二区三区| 国产午夜精品在线| 亚洲制服av| 国产精品爱久久久久久久| 亚洲毛片在线观看| 欧美国产日韩一区| 亚洲国产精品999| 久久久久国产成人精品亚洲午夜| 国产亚洲亚洲| 久久久久成人精品| 好看的日韩视频| 久久久久久久一区二区| 国产免费成人| 亚洲欧美日韩天堂| 欧美午夜在线视频| 在线天堂一区av电影| 欧美日韩一区二区三区在线视频| 亚洲欧洲中文日韩久久av乱码| 免费观看日韩av| 亚洲欧洲在线观看| 久久精品91| 欧美人与禽性xxxxx杂性| 免费观看久久久4p| 久久精品免费播放| 亚洲综合色丁香婷婷六月图片| 18成人免费观看视频| 国产亚洲精品bt天堂精选| 国产日产精品一区二区三区四区的观看方式 | 国产精品ⅴa在线观看h| 久久先锋影音| 99综合视频| 欧美日韩在线免费观看| 国产精品白丝黑袜喷水久久久| 国产精品亚洲综合天堂夜夜| 老牛影视一区二区三区| 日韩一级大片在线| 国产精品欧美在线| 欧美成人三级在线| 欧美gay视频激情| 精东粉嫩av免费一区二区三区| 亚洲一区二区三区在线看| 国产精品久久久久久久久久久久久| 午夜精品久久久久久久蜜桃app | 亚洲一区二区在线看| 午夜电影亚洲| 欧美日韩一区在线观看视频| 永久免费视频成人| 欧美伊久线香蕉线新在线| 欧美日韩三区四区| 亚洲二区在线观看| 欧美一区二区精品久久911| 欧美视频在线观看视频极品 | 久久精品国产亚洲5555| 欧美午夜免费| 99v久久综合狠狠综合久久| 蜜臀av性久久久久蜜臀aⅴ| 国产丝袜美腿一区二区三区| 亚洲视屏在线播放| 欧美日韩国产不卡| 亚洲精品视频一区二区三区| 久久九九国产精品| 国产日本欧美一区二区| 性欧美超级视频| 国产亚洲精品aa午夜观看| 性亚洲最疯狂xxxx高清| 国产嫩草一区二区三区在线观看| 一区二区三区你懂的| 欧美日韩a区| 99视频有精品| 国产精品你懂的| 久久人人97超碰精品888| 国内外成人在线| 久久综合久久综合这里只有精品| 在线精品视频一区二区| 久久免费的精品国产v∧| 韩国av一区二区三区在线观看| 亚洲婷婷综合色高清在线| 国产精品自在在线| 久久久久久久一区| 一区二区三区在线观看视频| 美女任你摸久久| 亚洲精品黄网在线观看|