簡述jq中attr 和prop 的區別

2022-07-28 17:18:25 字數 1572 閱讀 7509

attr,prop都是屬性的意思,那他們有什麼區別呢?我們先來看一下jquery的部分原始碼:

attr部分:

1

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

8if ( pass && jquery.isfunction( jquery.fn[ name ] ) )

11// fallback to prop when attributes are not supported

12if ( typeof elem.getattribute === "undefined" )

15notxml = ntype !== 1 || !jquery.isxmldoc( elem );

16// all attributes are lowercase

17// grab necessary hook if one is defined

18if ( notxml )

22if ( value !== undefined ) else if ( hooks && "set" in hooks && notxml && (ret = hooks.set( elem, value, name )) !== undefined ) else

32} else if ( hooks && "get" in hooks && notxml && (ret = hooks.get( elem, name )) !== null ) else

41 }

prop部分:

1

prop: function( elem, name, value )

8notxml = ntype !== 1 || !jquery.isxmldoc( elem );

9if ( notxml )

14if ( value !== undefined ) else

20} else else

26}

27 }

我們注意到,兩個方法最主要的原始碼部分是:attr是通過setatrribute和getattribute來設定的,使用的是dom屬性節點,而prop是通過document.getelementbyid(el)[name] = value來設定的,是轉化為js物件的屬性。

通常在獲取或者設定checked,selected,readonly,disabled等的時候使用prop效果更好,減少了訪問dom屬性節點的頻率。

大家知道,有的瀏覽器只要寫checked,disabled就可以了,而有的則需要些checked=「checked」,disabled=「disabled」。比如用attr來獲取checked,選中狀態獲取attr(「checked」)為checked,沒有選中則為undefined。。而prop來獲取的為,選中為true,沒有選中為false。

另外,用prop來設定屬性名,html結構是不會發生變化的。而用attr來設定屬性名,html結構是會發生變化的。

總的來說,按照我自己的理解,一般如果是標籤自身自帶的屬性,我們用prop方法來獲取;如果是自定義的屬性,我們用attr方法來獲取。

JQ中attr 和prop 的使用區別

1.attr 是獲取物件屬性的,比如獲取乙個的alt屬性 img attr alt 2.對於不用寫值的屬性比如 disabled selected checked 使用prop disabled在瀏覽器中寫法不一致,有些直接寫 disabled 有寫需要這樣寫 disabled disabled 使...

jq中attr()和prop 屬性的區別

query1.6中新加了乙個方法prop 一直沒用過它,官方解釋只有一句話 獲取在匹配的元素集中的第乙個元素的屬性值。大家都知道有的瀏覽器只要寫disabled,checked就可以了,而有的要寫成disabled disabled checked checked 比如用attr checked 獲...

JQ中prop與attr區別

一 attr和prop區別 attr 是從頁面搜尋獲得元素值,所以頁面必須明確定義元素才能獲取值,相對來說較慢。prop是從屬性物件中取值,屬性物件中有多少屬性,就能獲取多少值,不需要在頁面中顯示定義。二 attr和prop怎麼選擇?對於html元素本身就帶有的固有屬性,在處理時,使用prop方法。...