關於jquery裏面prop和attr的帶示例詳細對比,深度理解

以前經常把attr和prop搞混,由於它們在許多場景用法其實是一樣的,因此也沒有出現大的差錯。直到最近,寫項目被一個bug困擾很久,才意識到attr和prop的區別。

這裏整理一下異同點。

這裏我寫了一個簡單的demo設置了一些不同的屬性在div上

<style>
        .hes{
            height: 200px;
        }
        .left{
            float: left;
        }
    </style>
</head>
<body>
<div id="no1" data-person="小明" data-id="testA" style="display: inline-block;border: 1px solid #ddd;" class="hes left">text</div>
</body>
大家看到了 這個div上有我設置的各種屬性,下面我把它放到瀏覽器上執行一下。

先對比class

 

這裏可以看到class 兩個屬性獲取的是完全一樣的。


接着對比 data-person和data-id


這裏我們就可以發現,prop在獲取元素自定義屬性的時候獲取不到了,但是attr能夠獲取到。


接下來對比style




很明顯attr只是獲取屬性等號後面的值,而prop則是深度全面的獲取style在這個標籤上的詳細信息,但是並不包括前置style表中通過.hes 和 .left 賦予的style屬性。

我們可以看到,雖然在前置style裏設置了

<style>
        .hes{
            height: 200px;
        }
        .left{
            float: left;
        }
    </style>
但是我們我們再console裏看到的依然是



當我們對比attr無法獲取的屬性時,我們用另一個例子來比較

<input id="check1" type="checkbox" checked>
<input id="check2" type="checkbox">



這裏就可以發現 在這 當標籤中沒有checked 屬性時attr 是獲取不到的,而當有checked屬性時 attr獲取的值是“checked”而非true,其實等同於checked="checked"獲取到的值。

而prop則是全部都按照true和false來判斷


經過上述這些,我們來個總結會發現

prop獲取到的是標籤的固有屬性,本身就有的屬性,並且獲取到的信息更深層次,例如:checked和style爲例。

attr獲取到的是標籤定義屬性(注意:固有屬性只要在標籤中寫了,也算是被定義可當做定義屬性),獲取到的值一般是等號後面所對應的值,更爲直觀。即使沒有等號,入checked這種情況,也默認爲checked="checked"

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章