相比attr,prop是1.6.1才新出來的,兩者從中文意思理解,都是獲取/設定屬性的方法(attributes和properties)。只是,window或document中使用.attr()方法在jquery1.6之前不能正常執行,因為window和document中不能有attributes。prop應運而生了。
之前看網上對比兩者的文章,更是列出乙個表來區分什麼標籤下使用prop,什麼標籤下使用attr,原諒我是懶惰的人,最害怕要背的東西,所以只有自己想想辦法了。
既然我們想知道他們兩的區別,最好就看看他們的源**,不要被**長度所嚇到,我們只看關鍵的幾句:
attr方法**(jquery版本1.8.3)
prop方法**(jquery版本1.8.3)
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物件的乙個屬性。
既然明白了原理是這樣,我們來看看乙個例子:
el.attr(「style」)輸出undefined,因為attr是獲取的這個物件屬性節點的值,很顯然此時沒有這個屬性節點,自然輸出undefined
el.prop(「style」)輸出cssstyledeclaration物件,對於乙個dom物件,是具有原生的style物件屬性的,所以輸出了style物件
至於document.getelementbyid(「test」).style和上面那條一樣
我們接著看:
首先用attr方法給這個物件新增abc節點屬性,值為111,可以看到html的結構也變了
el.attr(「abc」)輸出結果為111,再正常不過了
el.prop(「abc」)輸出undefined,因為abc是在這個的屬性節點中,所以通過prop是取不到的
我們再接著來:
我們再用prop方法給這個物件設定了abc屬性,值為222,可以看到html的結構是沒有變化的。輸出的結果就不解釋了。
上面已經把原理講清楚了,什麼時候用什麼就可以自己把握了。
提一下,在遇到要獲取或設定checked,selected,readonly和disabled等屬性時,用prop方法顯然更好,比如像下面這樣:
顯然,布林值比字串值讓接下來的處理更合理。
jQuery中prop 和 attr 區別
prop 方法是在jquery1.6中新新增的。我們知道 attr checked 獲取checkbox的checked屬性時選中的時候可以取到值,值為 checked 但沒選中獲取值就是undefined。而現在使用prop方法獲取屬性則統一返回true和false。那麼具體的用法是什麼,以下是個...
JS中attr和prop區別
一 attr和prop區別 attr 是從頁面搜尋獲得元素值,所以頁面必須明確定義元素才能獲取值,相對來說較慢。prop是從屬性物件中取值,屬性物件中有多少屬性,就能獲取多少值,不需要在頁面中顯示定義。二 attr和prop怎麼選擇?對於html元素本身就帶有的固有屬性,在處理時,使用prop方法。...
js中prop和attr區別
首先 attr 是從頁面搜尋獲得元素值,所以頁面必須明確定義元素才能獲取值,相對來說比較慢。如 input checkbox attr type 返回checkbox.input checkbox attr checked 返回undefined。因為中沒有checked關鍵字。prop是從屬性物件...