摘要:后來(lái)了一番不知怎么搜索的又發(fā)現(xiàn)了一個(gè)和區(qū)別的一些解釋。操作對(duì)象不同在中表示文檔節(jié)點(diǎn)屬性,而則表示對(duì)象屬性。函數(shù)主要依賴(lài)的是對(duì)象的和兩個(gè)方法。
操作對(duì)象不同昨天在開(kāi)發(fā)的時(shí)候同事幫忙寫(xiě)了一小段JS代碼,取數(shù)據(jù)的時(shí)候用到了以前都沒(méi)用過(guò)的$(this).data("xxx")的這種形式,后來(lái)看了手冊(cè)才知道在HTML5中可以對(duì)元素進(jìn)行自定義屬性。格式類(lèi)似于data-xxx="value",然后可以用JQ中的.data()方法進(jìn)行存取數(shù)據(jù)。
后來(lái)GG了一番不知怎么搜索的又發(fā)現(xiàn)了一個(gè)attr()和prop()區(qū)別的一些解釋。
在jQuery中attr表示HTML文檔節(jié)點(diǎn)屬性,而prop則表示JS對(duì)象屬性。
在jQuery中,prop()函數(shù)的設(shè)計(jì)目標(biāo)是用于設(shè)置或獲取指定DOM元素(指的是JS對(duì)象,Element類(lèi)型)上的屬性(property);attr()函數(shù)的設(shè)計(jì)目標(biāo)是用于設(shè)置或獲取指定DOM元素所對(duì)應(yīng)的文檔節(jié)點(diǎn)上的屬性(attribute)。
當(dāng)然,在jQuery的底層實(shí)現(xiàn)中,函數(shù)attr()和prop()的功能都是通過(guò)JS原生的Element對(duì)象(如上述代碼中的msg)實(shí)現(xiàn)的。attr()函數(shù)主要依賴(lài)的是Element對(duì)象的getAttribute()和setAttribute()兩個(gè)方法。prop()函數(shù)主要依賴(lài)的則是JS中原生的對(duì)象屬性獲取和設(shè)置方式。
javascript
當(dāng)然,jQuery對(duì)這些操作方式進(jìn)行了封裝,使我們操作起來(lái)更加方便(比如以對(duì)象形式同時(shí)設(shè)置多個(gè)屬性),并且實(shí)現(xiàn)了跨瀏覽器兼容。
此外,雖然prop()針對(duì)的是DOM元素的property,而不是元素節(jié)點(diǎn)的attribute。不過(guò)DOM元素某些屬性的更改也會(huì)影響到元素節(jié)點(diǎn)上對(duì)應(yīng)的屬性。例如,property的id對(duì)應(yīng)attribute的id,property的className對(duì)應(yīng)attribute的class。
應(yīng)用版本不同
attr()是jQuery 1.0版本就有的函數(shù),prop()是jQuery 1.6版本新增的函數(shù)。毫無(wú)疑問(wèn),在1.6之前,你只能使用attr()函數(shù);1.6及以后版本,你可以根據(jù)實(shí)際需要選擇對(duì)應(yīng)的函數(shù)。
設(shè)置屬性值類(lèi)型不同由于attr()函數(shù)操作的是文檔節(jié)點(diǎn)的屬性,因此設(shè)置的屬性值只能是字符串類(lèi)型,如果不是字符串類(lèi)型,也會(huì)調(diào)用其toString()方法,將其轉(zhuǎn)為字符串類(lèi)型。
prop()函數(shù)操作的是JS對(duì)象的屬性,因此設(shè)置的屬性值可以為包括數(shù)組和對(duì)象在內(nèi)的任意類(lèi)型。
在jQuery 1.6之前,只有attr()函數(shù)可用,該函數(shù)不僅承擔(dān)了attribute的設(shè)置和獲取工作,還同時(shí)承擔(dān)了property的設(shè)置和獲取工作。例如:在jQuery 1.6之前,attr()也可以設(shè)置或獲取tagName、className、nodeName、nodeType等DOM元素的property。
直到j(luò)Query 1.6新增prop()函數(shù),并用來(lái)承擔(dān)property的設(shè)置或獲取工作之后,attr()才只用來(lái)負(fù)責(zé)attribute的設(shè)置和獲取工作。
★★★★★
此外,對(duì)于表單元素的checked、selected、disabled等屬性,在jQuery 1.6之前,attr()獲取這些屬性的返回值為Boolean類(lèi)型:如果被選中(或禁用)就返回true,否則返回false。
★★★★★
但是從1.6開(kāi)始,使用attr()獲取這些屬性的返回值為String類(lèi)型,如果被選中(或禁用)就返回checked、selected或disabled,否則(即元素節(jié)點(diǎn)沒(méi)有該屬性)返回undefined。并且,在某些版本中,這些屬性值表示文檔加載時(shí)的初始狀態(tài)值,即使之后更改了這些元素的選中(或禁用)狀態(tài),對(duì)應(yīng)的屬性值也不會(huì)發(fā)生改變。因?yàn)閖Query認(rèn)為:attribute的checked、selected、disabled就是表示該屬性初始狀態(tài)的值,property的checked、selected、disabled才表示該屬性實(shí)時(shí)狀態(tài)的值(值為true或false)。
因此,在jQuery 1.6及以后版本中,請(qǐng)使用prop()函數(shù)來(lái)設(shè)置或獲取checked、selected、disabled等屬性。對(duì)于其它能夠用prop()實(shí)現(xiàn)的操作,也盡量使用prop()函數(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/85643.html
摘要:需求很簡(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(...
摘要:先提出問(wèn)題對(duì)于這類(lèi)值是的屬性,用的或方法進(jìn)行讀取或設(shè)置值是有區(qū)別的。因此,如果你想知道文本框的當(dāng)前值,則讀取。的值并不會(huì)隨著的狀態(tài)而作出相應(yīng)改變,而會(huì)。為對(duì)象設(shè)置值的安全做法避免內(nèi)存泄漏是使用。參考翻譯地址的與的區(qū)別 先提出問(wèn)題:對(duì)于 checked 這類(lèi)值是 true/false 的屬性,用 jQuery 的 attr 或 prop 方法進(jìn)行 讀取或設(shè)置值是有區(qū)別的。 在看 jQue...
摘要:今天研究前端的給固有屬性加值是出現(xiàn)錯(cuò)誤,搜索了下,找到了原因,就是中和的區(qū)別。下面和大家分享下在高版本的引入方法后,什么時(shí)候該用什么時(shí)候用它們兩個(gè)之間有什么區(qū)別這些問(wèn)題就出現(xiàn)了。關(guān)于它們兩個(gè)的區(qū)別,網(wǎng)上的答案很多。 今天研究前端jquery的attr給固有屬性加值是出現(xiàn)錯(cuò)誤,搜索了下,找到了原因,就是:jquery中attr和prop的區(qū)別。下面和大家分享下: 在高版本的jquery引...
摘要:在中新加了一個(gè)方法,查看文檔可以看到一句話獲取在匹配的元素集中的第一個(gè)元素的屬性值。這種情況適用于多選項(xiàng)全選和反選的情況。 在jquery1.6中新加了一個(gè)方法prop(),查看jquery文檔可以看到一句話:獲取在匹配的元素集中的第一個(gè)元素的屬性值。 大家都知道有的瀏覽器只要寫(xiě)disabled,checked就可以了,而有的要寫(xiě)成disabled = disabled,checked...
閱讀 966·2023-04-26 02:49
閱讀 1177·2021-11-25 09:43
閱讀 2549·2021-11-18 10:02
閱讀 2923·2021-10-18 13:32
閱讀 1285·2019-08-30 13:54
閱讀 2081·2019-08-30 12:58
閱讀 3015·2019-08-29 14:06
閱讀 2155·2019-08-28 18:10