摘要:在使用上面,已經(jīng)表明態(tài)度模板綁定是通過(guò)和事件來(lái)工作的,而不是。更改的值,相當(dāng)于再次初始化。原生操作讀寫(xiě)刪除采用的是更改的方式,基本上對(duì)應(yīng)中提供的三個(gè)操作的方法。
為了在翻譯上顯示出區(qū)別,Attribute一般被翻譯為特性,Property被譯為屬性。
在使用上面,Angular已經(jīng)表明態(tài)度
Template binding works with properties and events, not attributes.
模板綁定是通過(guò) property 和事件來(lái)工作的,而不是 attribute。
jQuery中的prop()和attr()如何選擇,眾說(shuō)紛紜...
兩種主流觀點(diǎn):
對(duì)于一些公認(rèn)的attribute和property,使用setAttribute(),理由是property會(huì)出現(xiàn)class映射過(guò)去為className,名稱(chēng)不統(tǒng)一的問(wèn)題。
紅寶書(shū)作者推薦操作DOM property,因?yàn)樵跒g覽器上面表現(xiàn)的比較一致。
HTML attribute & DOM property 關(guān)系與區(qū)別引用Angular文檔中的一段話去概括兩者的關(guān)系和區(qū)別:
HTML attribute 與 DOM property 的對(duì)比
attribute 是由 HTML 定義的。property 是由 DOM (Document Object Model) 定義的。
少量 HTML attribute 和 property 之間有著 1:1 的映射,如id。
有些 HTML attribute 沒(méi)有對(duì)應(yīng)的 property,如colspan。
有些 DOM property 沒(méi)有對(duì)應(yīng)的 attribute,如textContent。
普遍原則:
HTML attribute 初始化 DOM property,然后它們的任務(wù)就完成了。
更改 attribute 的值,相當(dāng)于再次初始化DOM property 。
更改 property 的值,property值改變,attribute值不變。
幾個(gè)有代表性的映射表
HTML attribute | DOM property |
---|---|
id | id |
class | className |
checked = "checked" | checked 值為true |
為什么說(shuō)是普遍原則呢?在低版本的ie中,操作DOM property中的value,attribute中的value也發(fā)生了改變。完全不講道理 - -
更改HTML attribute
myInput.setAttribute("value", "test Attr");
瀏覽器 | myInput.getAttribute("value") | myInput.value |
---|---|---|
chrome ie11 ff | test Attr | test Attr |
ie8 | test Attr | test Attr |
更改DOM property
document.getElementById("myInput").value = "test property";
瀏覽器 | myInput.getAttribute("value") | myInput.value |
---|---|---|
chrome ie11 ff | 123 | test property |
ie8 | test property (普遍原則下應(yīng)該為123) | test property |
prop()采用的是更改DOM property的方式,基本上對(duì)應(yīng)更改DOM屬性。
原生DOM | jQuery | 操作 |
---|---|---|
element.value | $element.prop( name[,value]) | 讀寫(xiě) |
delete element.propertyName | $element.removeProp( propertyName ) | 刪除 |
attr() 采用的是更改HTML attribute的方式,基本上對(duì)應(yīng)DOM中提供的三個(gè)操作attribute的方法。
原生DOM | jQuery | 操作 |
---|---|---|
element.getAttribute(name) | $element.attr(name) | 讀 |
element.setAttribute(name,value) | $element.attr(name ,value) | 寫(xiě) |
delete element.removeAttribute(name) | $element.removeAttr( name ) | 刪除 |
獲取一些標(biāo)簽上面的的自定義屬性,或者一些基本不會(huì)改變的特性的時(shí)候,多數(shù)情況下用attr()(data-*等除外)。
$("form").attr("user-my-name"); // nilinli $("form").attr("action"); // test.php
其他情況下,操作DOM與頁(yè)面交互,一般情況下用prop()
總的來(lái)說(shuō),盡量操作DOM property,只有在沒(méi)有DOM property(自定義attribute或者沒(méi)有相關(guān)映射),才去操作HTML attribute。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/51688.html
摘要:在使用上面,已經(jīng)表明態(tài)度模板綁定是通過(guò)和事件來(lái)工作的,而不是。更改的值,相當(dāng)于再次初始化。原生操作讀寫(xiě)刪除采用的是更改的方式,基本上對(duì)應(yīng)中提供的三個(gè)操作的方法。 為了在翻譯上顯示出區(qū)別,Attribute一般被翻譯為特性,Property被譯為屬性。 在使用上面,Angular已經(jīng)表明態(tài)度 Template binding works with properties and even...
摘要:前端雜談第一個(gè)問(wèn)題什么是什么是是我們?cè)诖a中經(jīng)常看到的鍵值對(duì)例如上面代碼中的節(jié)點(diǎn)有三個(gè)是對(duì)應(yīng)的節(jié)點(diǎn)的對(duì)象屬性例如第二個(gè)問(wèn)題從上面的例子來(lái)看似乎和是相同的那么他們有什么區(qū)別呢讓我們來(lái)看另一段代碼在頁(yè)面加載后我們?cè)谶@個(gè)中輸入注意這段代碼 前端雜談: Attribute VS Property 第一個(gè)問(wèn)題: 什么是 attribute & 什么是 property ? attribute 是...
摘要:需求很簡(jiǎn)單的,一個(gè)非常簡(jiǎn)單的復(fù)選框的使用。與的區(qū)別復(fù)選框設(shè)置設(shè)置自定義自定義設(shè)置類(lèi)型設(shè)置類(lèi)型支持類(lèi)型在這里溫馨提示提示一下,當(dāng)我們?cè)O(shè)置這個(gè)屬性時(shí),再用獲取的時(shí)候,控制提示。 問(wèn)題引入 昨天接到了一個(gè)活,里面有一個(gè)小需求,在寫(xiě)的過(guò)程中遇到了一個(gè)小問(wèn)題。雖然這個(gè)問(wèn)題并不是很復(fù)雜的東西,但卻是一個(gè)比較細(xì)節(jié)的問(wèn)題。相信不少新手前端會(huì)遇到。下面我先描述一下我這個(gè)遇到的這個(gè)需求。 showImg(...
摘要:最近,一個(gè)小伙伴問(wèn)了我一個(gè)問(wèn)題和的區(qū)別當(dāng)時(shí)我想了又想,很不好意思的說(shuō)了我不知道,所以,抽了個(gè)事件好好的利用了一下度娘和總結(jié)了一下。 最近,一個(gè)小伙伴問(wèn)了我一個(gè)問(wèn)題property和attribute的區(qū)別?當(dāng)時(shí)我想了又想,很不好意思的說(shuō)了我不知道,所以,抽了個(gè)事件好好的利用了一下‘度娘’和‘Google’總結(jié)了一下。度娘搜索到的有用信息知乎中的討論csdn搜索的結(jié)果,Google發(fā)現(xiàn)的...
我們時(shí)常會(huì)想在保持第三方組件原有功能(屬性props、事件events、插槽slots、方法methods)的基礎(chǔ)上,這些功能如何優(yōu)化的實(shí)現(xiàn)? 以Element Plus的el-input為例: 在封裝一個(gè)MyInput組件,把要使用的屬性props、事件events和插槽slots、方法methods先要依照自己的需求來(lái)編寫(xiě): //MyInput.vue <template&...
閱讀 2913·2021-11-11 16:55
閱讀 959·2021-09-28 09:36
閱讀 3808·2021-09-22 15:22
閱讀 2243·2021-09-06 15:12
閱讀 1773·2021-08-19 10:55
閱讀 2898·2019-08-30 12:52
閱讀 508·2019-08-29 14:03
閱讀 1214·2019-08-29 12:27