JavaScript中的property和attribute的區(qū)別

1. 定義

Property:屬性俱诸,所有的HTML元素都由HTMLElement類型表示馅巷,HTMLElement類型直接繼承自Element并添加了一些屬性急前,添加的這些屬性分別對應于每個HTML元素都有下面的這5個標準特性:id狈网,title礼搁,lang饶碘,dir,className馒吴。DOM節(jié)點是一個對象扎运,因此,他可以和其他的JavaScript對象一樣添加自定義的屬性以及方法饮戳。property的值可以是任何的數(shù)據(jù)類型豪治,對大小寫敏感,自定義的property不會出現(xiàn)在html代碼中扯罐,只存在js中负拟。

Attribute:特性,區(qū)別于property歹河,attribute只能是字符串掩浙,大小寫不敏感花吟,出現(xiàn)在innerHTML中,通過類數(shù)組attributes可以羅列所有的attribute厨姚。

2. 相同之處

標準的 DOM properties 與 attributes 是同步的衅澈。公認的(非自定義的)特性會被以屬性的形式添加到DOM對象中。如谬墙,id今布,align,style等拭抬,這時候操作property或者使用操作特性的DOM方法如getAttribute()都可以操作屬性部默。不過傳遞給getAttribute()的特性名與實際的特性名相同。因此對于class的特性值獲取的時候要傳入“class”玖喘。

3. 不同之處

  • 對于有些標準的特性的操作甩牺,getAttribute與點號(.)獲取的值存在差異性。如href累奈,src贬派,value,style澎媒,onclick等事件處理程序搞乏。
  • href:getAttribute獲取的是href的實際值,而點號獲取的是完整的url戒努,存在瀏覽器差異请敦。
    <a href="#"></a>
    <script>
    var a = document.body.children[0]
    a.href = '/'
    alert( 'attribute:' + a.getAttribute('href') ) // '/'
    alert( 'property:' + a.href ) // IE: '/', others: full URL
    </script>

src的值的獲取類似href,不過IE也會返回full URL储玫;

value值同樣存在一些 'one-way'(單向)同步的內置屬性侍筛。

例如,input.value 從 attribute 中同步(即 property 從 attribute 中獲得同步)

 <input type="text" value="markup">
  <script>
       var input = document.body.children[0];
       input.setAttribute('value', 'new');
       alert( input.value ); // 'new', input.value changed
       alert( input.getAtrribute(value) ); // 'new'
  </script>

但是 attribute 不能從 property 中獲得同步:

   <input type="text" value="markup">
   <script>
        var input = document.body.children[0];
        input.value = 'new';
        alert(input.getAttribute('value'));  // 'markup', not changed!
  </script>

getAttribute獲取的是初始值撒穷,而點號獲取的是初始值或者.value修改后的值,例如當訪問者輸入了某些字符后匣椰,'value' attribute 在 property 更新后維持了原始值。原始值可以用來檢驗 input 是否變化端礼,或者重置它禽笑。

對于style和onclick等事件處理程序,getAttribute方法訪問時會返回字符串蛤奥,而點號返回的是相應的對象和事件處理函數(shù)佳镜。

對于input中的checked屬性,

<input type="checkbox" checked>
<script>
    var input  = document.body.children[0]
    alert( input.checked ) // true
    alert( input.getAttribute('checked') ) // empty string
</script>

getAttribute獲取的是你是實際設置的值凡桥。而點號返回的是布爾值蟀伸。

瀏覽器兼容性上的差別

  • 在IE<9的瀏覽器中,可以用點號和getAttribute在相互之間訪問自定義屬性。
  • IE<8(包括IE8種的IE7兼容模式)望蜡,property和attribute相同唤崭。因為attribute對大小寫不敏感,在這種情況下脖律,用getAttribute訪問特性的時候谢肾,瀏覽器會選擇第一次出現(xiàn)的值。
document.body.abba = 1 // assign property (now can read it by getAttribute)
document.body.ABBA = 5 // assign property with another case
// must get a property named 'ABba' in case-insensitive way.
alert( document.body.getAttribute('ABba') ) // 1

優(yōu)先選擇property

在實際應用中小泉,98%的 DOM 操作都是使用 properties芦疏。

只有兩種情形需要使用attributes

  • 自定義 HTML attributes,因為它并不同步到DOM property微姊。
  • 訪問內置的 HTML attributes酸茴,這些 attribute 不能從 property 同步過來。例如 INPUT標簽的value值兢交。

參考資料:
http://javascript.info/tutorial/attributes-and-custom-properties

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末薪捍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子配喳,更是在濱河造成了極大的恐慌酪穿,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,835評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晴裹,死亡現(xiàn)場離奇詭異被济,居然都是意外死亡,警方通過查閱死者的電腦和手機涧团,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,900評論 2 383
  • 文/潘曉璐 我一進店門只磷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泌绣,你說我怎么就攤上這事钮追。” “怎么了阿迈?”我有些...
    開封第一講書人閱讀 156,481評論 0 345
  • 文/不壞的土叔 我叫張陵畏陕,是天一觀的道長。 經(jīng)常有香客問我仿滔,道長,這世上最難降的妖魔是什么犹芹? 我笑而不...
    開封第一講書人閱讀 56,303評論 1 282
  • 正文 為了忘掉前任崎页,我火速辦了婚禮,結果婚禮上腰埂,老公的妹妹穿的比我還像新娘飒焦。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 65,375評論 5 384
  • 文/花漫 我一把揭開白布牺荠。 她就那樣靜靜地躺著翁巍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪休雌。 梳的紋絲不亂的頭發(fā)上灶壶,一...
    開封第一講書人閱讀 49,729評論 1 289
  • 那天,我揣著相機與錄音杈曲,去河邊找鬼驰凛。 笑死,一個胖子當著我的面吹牛担扑,可吹牛的內容都是我干的恰响。 我是一名探鬼主播,決...
    沈念sama閱讀 38,877評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼涌献,長吁一口氣:“原來是場噩夢啊……” “哼胚宦!你這毒婦竟也來了?” 一聲冷哼從身側響起燕垃,我...
    開封第一講書人閱讀 37,633評論 0 266
  • 序言:老撾萬榮一對情侶失蹤枢劝,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后利术,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呈野,經(jīng)...
    沈念sama閱讀 44,088評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,443評論 2 326
  • 正文 我和宋清朗相戀三年印叁,在試婚紗的時候發(fā)現(xiàn)自己被綠了被冒。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,563評論 1 339
  • 序言:一個原本活蹦亂跳的男人離奇死亡轮蜕,死狀恐怖昨悼,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情跃洛,我是刑警寧澤率触,帶...
    沈念sama閱讀 34,251評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站汇竭,受9級特大地震影響葱蝗,放射性物質發(fā)生泄漏。R本人自食惡果不足惜细燎,卻給世界環(huán)境...
    茶點故事閱讀 39,827評論 3 312
  • 文/蒙蒙 一两曼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧玻驻,春花似錦悼凑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,712評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽渐夸。三九已至,卻和暖如春渔欢,著一層夾襖步出監(jiān)牢的瞬間墓塌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,943評論 1 264
  • 我被黑心中介騙來泰國打工膘茎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桃纯,地道東北人。 一個月前我還...
    沈念sama閱讀 46,240評論 2 360
  • 正文 我出身青樓披坏,卻偏偏與公主長得像态坦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棒拂,可洞房花燭夜當晚...
    茶點故事閱讀 43,435評論 2 348

推薦閱讀更多精彩內容