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

JS中attr和prop屬性的區別以及優先選擇示例
來源:易賢網 閱讀:897 次 日期:2014-09-11 11:53:09
溫馨提示:易賢網小編為您整理了“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)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久亚洲私人国产精品va媚药| 在线一区视频| 欧美乱人伦中文字幕在线| 免播放器亚洲| 亚洲欧美日韩在线| 另类成人小视频在线| 欧美激情精品久久久久久久变态| 国产精品国产三级国产专播品爱网| 国产一二三精品| 亚洲欧洲日产国产综合网| 亚洲欧美资源在线| 欧美高清视频www夜色资源网| 国产精品一卡| 亚洲人妖在线| 久久精品视频播放| 欧美视频不卡| 亚洲国产欧美不卡在线观看| 亚洲一区二区三区四区视频| 欧美1区2区视频| 国产欧美丝祙| 一区二区三区精品视频| 久久蜜桃精品| 国产欧美日韩综合精品二区| 亚洲乱码久久| 蜜臀av在线播放一区二区三区 | 一区二区三区国产精华| 久久免费黄色| 国产一区二区三区四区老人| 亚洲视频一区二区免费在线观看| 美女诱惑黄网站一区| 国产一区二区三区不卡在线观看 | 在线播放豆国产99亚洲| 午夜精品福利一区二区蜜股av| 欧美极品在线观看| 一色屋精品视频在线观看网站 | 国产精品伦理| 亚洲免费成人| 欧美国产高清| 国内一区二区三区在线视频| 日韩网站在线看片你懂的| 欧美xart系列高清| 影音先锋久久资源网| 欧美在线视频一区二区| 欧美三级网页| 亚洲国产欧美日韩另类综合| 久热这里只精品99re8久| 国产精品看片资源| 中文一区字幕| 国产精品v片在线观看不卡| 亚洲欧洲在线免费| 欧美成人中文| 黄色亚洲免费| 久久久久久亚洲精品不卡4k岛国| 国产精品久久久久77777| 亚洲精品视频中文字幕| 欧美激情按摩| 亚洲精品免费一二三区| 欧美国产三级| 永久91嫩草亚洲精品人人| 欧美一区成人| 国产欧美日韩在线视频| 亚洲欧美另类综合偷拍| 国产精品视频一| 亚洲在线成人精品| 国产精品久久久久久模特| 夜夜嗨av色综合久久久综合网| 欧美老女人xx| 99精品久久久| 国产日韩免费| 久久久不卡网国产精品一区| 亚洲第一偷拍| 欧美日韩国产欧| 亚洲一区二区在线免费观看| 国产精品主播| 裸体一区二区三区| 亚洲精品免费一区二区三区| 欧美日韩国产一级| 亚洲尤物影院| 亚洲国产精品999| 国产一区二区三区四区五区美女| 国产视频亚洲精品| 新片速递亚洲合集欧美合集| 好男人免费精品视频| 另类图片综合电影| 亚洲国产精品福利| 欧美日韩精品在线播放| 亚洲一区在线观看视频| 韩国福利一区| 欧美激情亚洲国产| 亚洲一区自拍| 黄网站免费久久| 欧美视频不卡中文| 欧美综合国产精品久久丁香| 亚洲国产精品一区| 欧美日韩亚洲综合| 欧美一级视频精品观看| 亚洲国产精品va在看黑人| 欧美激情综合亚洲一二区| 亚洲欧美精品中文字幕在线| 好看的av在线不卡观看| 欧美区国产区| 久久影视精品| 亚洲影院免费观看| 在线免费观看日本欧美| 欧美性猛片xxxx免费看久爱| 久久一二三四| 午夜国产欧美理论在线播放| 亚洲第一在线综合网站| 国产精品欧美一区二区三区奶水 | 亚洲精品男同| 国产日韩精品一区二区三区在线| 免费在线观看日韩欧美| 亚洲欧美日韩高清| 亚洲黄色三级| 黄色精品在线看| 国产精品毛片a∨一区二区三区| 久久青草欧美一区二区三区| 亚洲深夜福利网站| 亚洲国产91色在线| 黄色欧美成人| 国产精品一区一区| 欧美经典一区二区| 久久亚洲一区二区| 欧美伊人久久久久久久久影院| 日韩手机在线导航| 欧美在线观看视频在线| 国产精品高潮粉嫩av| 欧美a一区二区| 久久在线91| 久久久国产精品一区| 在线视频一区二区| 在线日韩av片| 国产亚洲精品福利| 欧美国产一区在线| 久久午夜电影网| 欧美在线短视频| 久久久91精品国产| 亚洲一区二三| 亚洲美女av黄| 亚洲高清不卡| 亚洲国产高清一区二区三区| 亚洲国产欧美一区二区三区久久| 欧美日韩www| 欧美精品七区| 欧美日韩免费看| 亚洲美女在线观看| 欧美久久久久久久久久| 欧美日本韩国一区二区三区| 国产精品久久97| 一区二区三区精品视频| 久久久久久久高潮| 亚洲免费观看高清完整版在线观看| 久久久人成影片一区二区三区观看| 欧美黄色成人网| 国产精品一区视频| 99国产精品99久久久久久| 午夜精品一区二区三区电影天堂| 亚洲女ⅴideoshd黑人| 欧美国产一区二区在线观看| 亚洲电影免费| 欧美成人激情视频免费观看| 亚洲激情成人在线| 欧美另类一区| 久久久久一本一区二区青青蜜月| 亚洲激情av| 欧美日韩国产综合一区二区| 一区二区三区精品| 亚洲国产高清高潮精品美女| 国语自产精品视频在线看8查询8| 久久av最新网址| 欧美成人一区在线| 国产精品天美传媒入口| 亚洲国产精品传媒在线观看| 欧美亚洲三级| 欧美日韩大片| 国产一区激情| 亚洲欧美日韩中文在线制服| 欧美成人免费播放| 国产老女人精品毛片久久| 亚洲黄色av一区| 久久天堂精品| 国产女主播一区二区三区| 亚洲精品国产精品乱码不99| 久久成人免费网| 欧美亚洲不卡| 亚洲精品护士| 狼人天天伊人久久| 国产专区欧美精品| 这里只有精品视频| 免费久久久一本精品久久区| 国内精品美女在线观看| 亚洲一区二区三区高清不卡| 欧美黄色片免费观看| 在线观看成人小视频| 欧美一区二区三区免费大片| 欧美天天影院| 日韩亚洲不卡在线| 欧美女主播在线| 亚洲欧洲三级| 欧美成人精品影院|