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

JS中attr和prop屬性的區別以及優先選擇示例
來源:易賢網 閱讀:895 次 日期:2015-01-19 13:52:02
溫馨提示:易賢網小編為您整理了“JS中attr和prop屬性的區別以及優先選擇示例”,方便廣大網友查閱!
L

相比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| 国产视频一区免费看| 亚洲看片免费| 麻豆成人在线观看| 国产在线观看一区| 亚洲综合精品四区| 欧美成人免费观看| 国产精品久久久久久久久久免费看| 国产偷国产偷精品高清尤物| 一本色道久久88综合亚洲精品ⅰ| 久久精品二区亚洲w码| 欧美日韩国产在线一区| 国自产拍偷拍福利精品免费一| 一区二区三区日韩欧美精品| 欧美成人日韩| 在线观看视频欧美| 久久人人97超碰精品888| 国产精品一区视频| 亚洲一区国产视频| 欧美日韩亚洲高清一区二区| 亚洲夫妻自拍| 欧美超级免费视 在线| 精品动漫3d一区二区三区免费版 | 亚洲无线一线二线三线区别av| 久久精品官网| 国模一区二区三区| 久久乐国产精品| 在线免费观看日本一区| 免费成人毛片| 亚洲欧洲日产国产综合网| 欧美成人精品高清在线播放| 永久免费精品影视网站| 老司机午夜免费精品视频| 激情久久中文字幕| 欧美大片在线看| 亚洲麻豆视频| 欧美视频导航| 亚洲综合第一| 韩国一区二区三区在线观看| 美女精品一区| 亚洲一区二区动漫| 国精品一区二区三区| 免费观看成人www动漫视频| 亚洲精品一区二区三区av| 欧美日韩午夜精品| 久久av资源网| 亚洲精品国久久99热| 欧美日韩国产专区| 欧美在线播放一区| 亚洲人体影院| 国产欧美精品一区 | 国产综合自拍| 女仆av观看一区| 亚洲女人小视频在线观看| 国产亚洲欧美一区| 欧美日韩国产成人在线| 小处雏高清一区二区三区| 怡红院av一区二区三区| 欧美日韩国产小视频| 欧美专区一区二区三区| 亚洲人体一区| 国产综合色产在线精品| 欧美日韩黄视频| 久久久久一区二区三区| 夜夜狂射影院欧美极品| 国模吧视频一区| 欧美午夜剧场| 美女国产一区| 欧美在线一二三| 国产精品99久久久久久白浆小说 | 久久9热精品视频| 日韩午夜av电影| 国产亚洲精品激情久久| 欧美电影在线观看完整版| 欧美一级久久| 亚洲小视频在线观看| 亚洲国产专区校园欧美| 国产一区二区三区在线观看精品| 欧美日韩一区二区三区在线视频| 久久久噜噜噜久久中文字免| 亚洲欧美日韩成人| 亚洲视频一二区| 一本大道久久a久久精品综合 | 欧美精品在线视频| 久久精品一本| 久久国产精品99精品国产| 亚洲欧美国产另类| 亚洲一区二区在线观看视频| 亚洲三级电影在线观看| 亚洲欧洲一级| 日韩一级在线| 一区二区三区视频观看| 一区二区三区欧美日韩| 亚洲婷婷在线| 亚洲综合成人婷婷小说| 午夜激情亚洲| 亚洲欧美日韩另类| 亚洲欧美日韩在线播放| 先锋影音一区二区三区| 久久黄色影院| 蜜桃av一区二区在线观看| 久久亚洲色图| 免费的成人av| 欧美日韩国产综合视频在线观看| 欧美日本一道本在线视频| 欧美日韩高清在线播放| 欧美日韩成人| 国产精品免费在线| 国内精品久久久久影院 日本资源| 国产精品亚洲综合久久| 国产美女一区| 精品99视频| 亚洲精品孕妇| 亚洲一区二区欧美日韩| 欧美在线视频在线播放完整版免费观看| 欧美在线影院在线视频| 免费看的黄色欧美网站| 欧美日韩福利在线观看| 国产精品久久一区二区三区| 国产午夜精品美女视频明星a级| 一区二区在线视频播放| 日韩视频专区| 久久国产精品久久w女人spa| 嫩草影视亚洲| 欧美激情偷拍| 国产精品视频午夜| 亚洲第一在线| 亚洲一区二区视频| 久久久久久久久久码影片| 欧美jizz19hd性欧美| 欧美日韩精品欧美日韩精品一| 国产精品另类一区| 亚洲激精日韩激精欧美精品| 在线视频亚洲| 久久久国产视频91| 国产精品白丝黑袜喷水久久久| 国产色视频一区| av不卡在线| 免播放器亚洲| 国产精品免费网站在线观看| 影音先锋亚洲视频| 亚洲男女自偷自拍| 欧美激情网友自拍| 影音先锋另类| 欧美在线免费看| 欧美午夜宅男影院| 国内伊人久久久久久网站视频| 亚洲一区免费视频| 久久久久看片| 香蕉成人啪国产精品视频综合网| 亚洲电影下载| 亚洲国产婷婷综合在线精品| 欧美资源在线观看| 欧美一区二区三区在线观看| 欧美一区成人| 夜夜夜精品看看| 黄色精品在线看| 免费日韩av电影| 久久精品国产77777蜜臀| 国产精品日韩欧美一区| 亚洲免费观看视频| 欧美成人a视频| 欧美视频在线观看 亚洲欧| 男人天堂欧美日韩| 在线日韩欧美| 久久久久国产精品厨房| 一区二区三区在线免费视频| 午夜欧美不卡精品aaaaa| 久久成人国产精品| 欧美大片在线观看一区| 国产精品一区二区在线| 国产一区再线| 毛片基地黄久久久久久天堂| 亚洲三级国产| 久久精品网址| 欧美一区视频在线| 国产日韩欧美成人| 亚洲天堂男人| 欧美成人精品高清在线播放| 国产乱码精品| 中国亚洲黄色| 国产精品一区免费视频| 日韩网站免费观看| 免费在线亚洲| 亚洲国产中文字幕在线观看| 久久婷婷色综合| 国产亚洲一区精品| 欧美亚洲视频在线观看| 国产精品一区二区久久精品| 中文国产一区| 激情小说另类小说亚洲欧美| 欧美中文字幕久久| 尤物精品国产第一福利三区| 亚洲国产精品一区|