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

JS中attr和prop屬性的區別以及優先選擇示例
來源:易賢網 閱讀:886 次 日期:2015-01-07 14:27:19
溫馨提示:易賢網小編為您整理了“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)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
在线中文字幕日韩| 国产精品久久久久99| 免费久久精品视频| 有坂深雪在线一区| 欧美成人一二三| 中文亚洲字幕| 国产午夜精品理论片a级探花| 久久久国产精品一区二区三区| 激情小说另类小说亚洲欧美| 欧美国产日本| 亚洲永久免费av| 在线观看日韩国产| 欧美午夜精品伦理| 久久精品国产亚洲a| 亚洲美女视频网| 国产精品一区二区久激情瑜伽| 久久电影一区| 亚洲伦理在线观看| 国产一区999| 欧美日韩中文精品| 老司机免费视频一区二区三区| 一区二区三区高清视频在线观看| 国产偷国产偷亚洲高清97cao| 欧美丰满高潮xxxx喷水动漫| 亚洲欧美日韩一区在线| 亚洲第一区在线| 国产日韩精品在线观看| 欧美精品不卡| 久久在线免费| 亚洲欧美日韩一区二区三区在线观看 | 久久三级视频| 在线亚洲一区观看| 亚洲福利久久| 国产色视频一区| 欧美三级电影精品| 嫩草影视亚洲| 久久久亚洲国产天美传媒修理工 | 亚洲免费视频中文字幕| 亚洲福利国产| 在线观看中文字幕不卡| 国产日韩精品一区| 国产精品卡一卡二卡三| 欧美午夜视频在线| 欧美日韩亚洲视频一区| 欧美电影电视剧在线观看| 久久久不卡网国产精品一区| 亚洲综合成人婷婷小说| 宅男精品视频| 一本到12不卡视频在线dvd| 亚洲黄一区二区三区| 伊人蜜桃色噜噜激情综合| 国产日韩欧美亚洲| 国产精品亚洲视频| 国产精品乱人伦一区二区| 欧美视频一二三区| 欧美视频中文字幕| 国产精品初高中精品久久| 欧美日韩精品不卡| 欧美丝袜一区二区三区| 欧美日韩国产免费| 欧美午夜视频在线| 国产精品久久久久久户外露出 | 久久精品久久99精品久久| 亚洲一区欧美激情| 亚洲视频一二区| 亚洲天堂av在线免费观看| 亚洲无线视频| 午夜在线一区| 久久免费高清视频| 久久伊人免费视频| 欧美大色视频| 欧美午夜精品久久久久久浪潮 | 亚洲男女毛片无遮挡| 一区二区成人精品| 一区二区三区欧美日韩| 亚洲图片欧美一区| 欧美一区午夜视频在线观看| 久久精品亚洲精品| 欧美暴力喷水在线| 欧美午夜一区二区福利视频| 国产农村妇女毛片精品久久麻豆| 国产综合色一区二区三区| 在线不卡a资源高清| 亚洲国产高清高潮精品美女| 亚洲人成网站精品片在线观看| 一本高清dvd不卡在线观看| 亚洲男人的天堂在线aⅴ视频| 久久国产精彩视频| 欧美精品18videos性欧美| 国产精品xnxxcom| 国产一区二区三区久久久久久久久 | 国产精品嫩草影院一区二区| 国产日韩精品一区观看| **欧美日韩vr在线| 亚洲一区二区三区免费在线观看 | 欧美韩日一区二区| 国产精品一国产精品k频道56| 激情五月婷婷综合| 一区二区三区视频观看| 欧美影院精品一区| 欧美精品在线视频观看| 国产视频一区二区三区在线观看| 亚洲电影视频在线| 亚洲欧美资源在线| 欧美区二区三区| 黄色成人在线网站| 亚洲欧美一区二区精品久久久 | 性色av一区二区三区| 美女久久一区| 国产日韩欧美一区二区| 日韩午夜视频在线观看| 久久免费精品日本久久中文字幕| 欧美日韩久久| 亚洲激情一区| 久久人人超碰| 国产亚洲人成a一在线v站| 亚洲五月六月| 欧美日韩美女在线| 亚洲国产日韩一区二区| 久久久福利视频| 国产精品稀缺呦系列在线| 亚洲精品美女在线观看| 久久综合伊人77777| 国产一区二区在线观看免费| 亚洲一区精品电影| 欧美视频三区在线播放| 99视频精品| 欧美日韩 国产精品| 亚洲精品国产精品久久清纯直播| 久久最新视频| 在线观看亚洲视频| 久久综合九色九九| 精品88久久久久88久久久| 久久精品男女| 国模大胆一区二区三区| 久久国产精品一区二区三区| 国产日韩欧美三级| 欧美一级片在线播放| 国产精品综合| 久久精品国产欧美激情| 国产在线不卡精品| 久久久久一区二区三区四区| 韩国精品久久久999| 久久精品国产99国产精品| 国产一区二区三区黄视频| 久久久久久久久久久一区| 狠狠色综合色综合网络| 裸体丰满少妇做受久久99精品| 亚洲高清视频一区| 欧美激情一区二区久久久| 一本到高清视频免费精品| 国产精品久久久久久久久动漫| 亚洲综合成人婷婷小说| 国产精品综合网站| 久久久久国色av免费看影院| 在线观看av不卡| 欧美精品一区二区三区蜜臀| 亚洲图片自拍偷拍| 国产午夜久久| 欧美国产日韩精品| 亚洲一区在线免费| 一区免费视频| 欧美深夜影院| 久久国产日本精品| 亚洲精品在线二区| 国产精品综合视频| 老司机久久99久久精品播放免费| 亚洲国产欧美另类丝袜| 欧美网站大全在线观看| 久久精品亚洲热| 99re66热这里只有精品4| 国产精品外国| 欧美国产高清| 久久国产精品黑丝| 99re热这里只有精品视频| 国产亚洲精品美女| 欧美日韩精品一区二区天天拍小说 | 国产精品一区免费视频| 久久久爽爽爽美女图片| 亚洲老板91色精品久久| 国产农村妇女毛片精品久久麻豆| 毛片一区二区| 欧美一区二区三区在线视频| 亚洲人成免费| 韩日欧美一区二区三区| 欧美午夜不卡影院在线观看完整版免费| 欧美尤物一区| 中文网丁香综合网| 亚洲韩日在线| 国产亚洲一二三区| 欧美私人啪啪vps| 欧美粗暴jizz性欧美20| 久久国产精品一区二区三区| 亚洲午夜激情网站| 亚洲欧洲一区| 亚洲国产精品成人久久综合一区 | 激情久久一区| 国产欧美一区二区在线观看| 欧美日韩一区二区三区| 欧美激情综合五月色丁香小说|