App下載

jQuery中attr()與prop()的區(qū)別

猿友 2021-01-25 17:46:46 瀏覽數(shù) (7242)
反饋

前提

在 jQuery 里,我們要獲取一個(gè)標(biāo)簽元素的屬性,可以用 attr()方法或者 prop()方法 ,那么兩者有什么區(qū)別呢?

jQuery attr() 方法 和 prop() 方法

  • ?attr() ?方法設(shè)置或返回被選元素的屬性值。
  • ?prop()? 方法設(shè)置或返回被選元素的屬性和值。

注:?jiǎn)渭儚亩x看的話,兩個(gè)方法的作用都是一樣的。而且用法也都差不多,如下所示。

作用一:返回被選元素的屬性值。語(yǔ)法如下:

$(selector).attr(attribute)
$(selector).prop(property)

作用二:設(shè)置被選元素的屬性和值。語(yǔ)法如下:

$(selector).attr(attribute,value)
$(selector).prop(property,value)

作用三:設(shè)置多個(gè)屬性和值。語(yǔ)法如下:

$(selector).attr( {attribute:value, attribute:value ...} ) //對(duì)象的寫(xiě)法,鍵值對(duì)
$(selector).prop( {property:value, property:value,...} ) //對(duì)象的寫(xiě)法,鍵值對(duì)

作用四:使用函數(shù)設(shè)置屬性和值。語(yǔ)法如下:(平時(shí)很少用到)

//第二個(gè)參數(shù):規(guī)定返回要設(shè)置的屬性值的函數(shù)。
/*該函數(shù)包括兩個(gè)參數(shù):
* index - 檢索集合中元素的 index 位置。
* oldvalue / currentvalue - 檢索被選元素的當(dāng)前屬性值。
*/
$(selector).attr(attribute,function(index,oldvalue))
$(selector).prop(property,function(index,currentvalue))

我們會(huì)發(fā)現(xiàn):

  • 兩個(gè)方法的用法都如出一轍,只是方法名稱存在差異。一個(gè)是 attr,一個(gè)是 prop。
  • attr 的 全拼是 attribute。 prop 的全拼是 property。它們是兩個(gè)不同的單詞,雖說(shuō)都有 屬性 的意思,但其中的寓意必然不一樣。

property 和 attribute 的 區(qū)別

  • ?property? n. 屬性,性質(zhì),性能;財(cái)產(chǎn);所有權(quán)
  • ?attribute? n. 屬性;特質(zhì)

由此可見(jiàn),兩者非常容易混淆,因?yàn)樵谥形纳系姆g都特別接近。但實(shí)際上,它們兩個(gè)是不同的東西,屬于不同的范疇。

  • 深究它們的中文含義,我們可以將 attribute 理解為 “特性” ,而將 property 理解為 “屬性”。
  • 顯而易見(jiàn),一個(gè)是 屬性,一個(gè)是特性。肯定不一樣了。
  • 如果你百度 “屬性” 關(guān)鍵字的話,你會(huì)發(fā)現(xiàn),屬性 對(duì)應(yīng)的英文直接就是 property。而且百度含義對(duì) “屬性” 的 詳細(xì)釋義 是:指事物本身固有的不可缺少的性質(zhì)。。

現(xiàn)在,我們知道了:

  • ?property? 屬性。它是與生俱來(lái)的,并不是后天賦予的。比如說(shuō),某些對(duì)象在定義時(shí)就具有某一些屬性。
  • ?attribute? 特性。本身沒(méi)有的,后天賦予的。比如說(shuō),某些對(duì)象在創(chuàng)建后,自定義賦予的一些屬性。

對(duì)應(yīng)到 js 中就是:

  • ?property? 是 DOM 中的屬性,是 JavaScript 里的對(duì)象;
  • ?attribute ?是 HTML 標(biāo)簽上的特性(屬性),它的值只能夠是字符串;

對(duì)應(yīng)到 jQuery 中就是:

  • 對(duì)于 HTML 元素本身就帶有的固有屬性,或者說(shuō) W3C 標(biāo)準(zhǔn)里就包含有這些屬性,更直觀的說(shuō)法就是,編輯器里面可以智能提示出來(lái)的一些屬性,如:src、href、value、class、name、id等。在處理時(shí),使用 prop() 方法。
  • 對(duì)于 HTML 元素我們自定義的 DOM 屬性,即元素本身是沒(méi)有這個(gè)屬性的,如:data-*。在處理時(shí),使用 attr() 方法。

attr() 方法 和 prop() 方法 的返回值

  • ?$(eleStr).attr()?
<img src="/smile.jpg"/>
<button>獲取圖像的 class 屬性值</button>
12
$("button").click(function(){
  console.log( $("img").attr("class") );//如果屬性存在,則返回屬性值;如果屬性不存在,則返回 undefined
  console.log( $("img").prop("class") );//如果屬性存在,則返回屬性值;如果屬性不存在,則返回 空("")
});
  • ?$(eleStr).prop()?
<input type="checkbox">
<button>獲取復(fù)選框的選中狀態(tài)</button>
12
$("button").click(function(){
  console.log( $("input").prop("checked") ); //如果屬性值存在,則返回 true;如果屬性值不存在,則返回 false。
  console.log( $("input").attr("checked") );//如果屬性值存在,則返回 checked;如果屬性值不存在,則返回 undefined。
});


1 人點(diǎn)贊