Jquery中attr()與prop()的區別

来源:https://www.cnblogs.com/shsxt/archive/2018/01/18/8311473.html
-Advertisement-
Play Games

在jQuery中,attr()函數和prop()函數都用於設置或獲取指定的屬性,它們的參數和用法也幾乎完全相同。但是,這兩個函數的用處卻並不相同。下麵我們來詳細介紹這兩個函數之間的區別。 1、操作對象不同 attr是單詞attribute的縮寫,prop是property的縮寫,它們的都表示”屬性” ...


在jQuery中,attr()函數和prop()函數都用於設置或獲取指定的屬性,它們的參數和用法也幾乎完全相同。但是,這兩個函數的用處卻並不相同。下麵我們來詳細介紹這兩個函數之間的區別。

1、操作對象不同

attr是單詞attribute的縮寫,prop是property的縮寫,它們的都表示”屬性”的意思。不過,在Jquery裡面attribute和property是兩個不同的概念。attribute表示HTML文檔節點的屬性,property表示JS對象的屬性。
我們來看個例子區分一下什麼是HTML文檔節點的屬性和JS對象的屬性:


 

 

2、應用版本不同

attr()是JQuery 1.0版本就有的函數,prop()是JQuery 1.6版本新增加的函數。也就是說,在JQuery 1.6版本之前,只能使用attr()函數。在JQuery 1.6版本後,可以根據不同的需求來選擇使用的函數。

在JQuery 1.6版本之前,attr()函數不僅要對attribute進行設置和獲取,還要對property進行設置和獲取。在1.6版本之前,attr()可以設置和獲取tagName、className、nodeName、nodeType等DOM元素的property。後來1.6版本之後出現了prop函數,可以通過它來對property進行獲取和設置,attr()函數才只用來對attribute的進行設置和獲取。
但是從1.6開始,使用attr()獲取這些屬性的返回值為String類型,如果被選中(或禁用)就返回checked、selected或disabled,否則(即元素節點沒有該屬性)返回undefined。並且,在某些版本中,這些屬性值表示文檔載入時的初始狀態值,即使之後更改了這些元素的選中(或禁用)狀態,對應的屬性值也不會發生改變。

因為jQuery認為:attribute的checked、selected、disabled就是表示該屬性初始狀態的值,property的checked、selected、disabled才表示該屬性實時狀態的值(值為true或false)。

因此,在jQuery 1.6及以後版本中,請使用prop()函數來設置或獲取checked、selected、disabled等屬性。對於其它能夠用prop()實現的操作,也儘量使用prop()函數。

3、設置屬性值的類型不同

由於attr()函數操作的是文檔節點的屬性,因此設置的屬性值只能是字元串類型,如果不是字元串類型,也會調用其toString()方法,將其轉為字元串類型。
prop()函數操作的是JS對象的屬性,因此設置的屬性值可以為包括數組和對象在內的任意類型。

總結:
對於HTML元素本身就帶有的固有屬性,例如:id、name等屬性,使用prop()函數。
對於HTML元素自定義的DOM屬性,使用attr()函數。
返回值是true/false的屬性,建議使用prop()
下麵我們舉例子解釋一下:
"div1" class="class1">

在例子中
元素的DOM屬性有”id、class”,這些屬性就是
屬性自帶的屬性,我們可以去參考W3C標準里包含的一些屬性,這些屬性就是固有屬性。處理這些屬性的時候我們就用prop()函數。
"div1" class="class1" data_id="1">

這裡的例子,固有屬性是”id、class”,然後又自定義了一個”data_id”的屬性,
元素本身就沒有這個屬性的,這種就是自定義的DOM屬性。處理這種屬性時,就用attr()函數。如果使用了prop()函數去獲取或設置值時,會返回undefinded。

我們再來看一個屬性值返回true和false的例子:
"chk1" type="checkbox" />
"chk2" type="checkbox" checked="checked" />

checkbox、radio和select這三個元素,選中的屬性對應的是”checked、checked和selected”,這些也是固有屬性,因此我們儘量用prop()函數去處理。在1.6版本後,attr()獲取的值返回的都是字元串,因此用attr()去獲取返回值是true/false的屬性,返回值是undefinded。

使用prop()函數返回的結果:
console.log($("#chk1").prop("checked")); // false
console.log($("#chk2").prop("checked")); // true

使用attr()函數返回的結果:

console.log($("#chk1").attr("checked")); // undefined
console.log($("#chk2").attr("checked")); // checked

上海尚學堂java原作,歡迎閱讀上海尚學堂更多java技術相關文章,轉載請說明出處。獲取更多資料或支持請加薇 java8733

   
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 開發過程中出現了通過自定義設置打開熱點後手機搜索不到熱點的問題。 後來通過觀看 /data/misc/wifi 目錄下的 hostapd.conf 文件,發現是 ...
  • speed-tools 是一款基於代理模式的動態部署apk熱更新框架、插件化開發框架; ...
  • 1、讀取通信錄 1)、9.0以前:AddressBook 2)、9.0以後:Contacts 2、調用通信錄UI(不弄) 1)、9.0以前:AddressBookUI 2)、9.0以後:ContactsUI 3、參考 0、寫在前面 1)、plist 需要設置 隱私許可權描述 NSContactsUsa ...
  • 我新建了一個web前端的新手交流群,包括基礎知識和剛入職的技術分享,人還不多,期待著每一個人的加入,希望可以得到你的認同哦~你的加入是我組織交流群的一大動力哦!~ web前端交流QQ群:314439765 ...
  • 經過這四期的講解,我們從Hello World應用入手,解釋了React最重要的概念JSX,以及兩種不同模式的應用構建方法。這一講我們著重對比傳統模式和新模式下的React項目構建,從而為初學者提供學習方向。 1. 傳統模式構建 一般在傳統模式下,我們構建前端項目很簡單。就是下載各種js文件,如JQ ...
  • 一、CSS和JS為什麼帶參數(形如.css?t=與.js?t=)怎樣獲取代碼 css和js帶參數(形如.css?t=與.js?t=) 使用參數有兩種可能: 第一、腳本並不存在,而是服務端動態生成的,因此帶了個版本號,以示區別。 即上面代碼對於文件來說 等價於 但瀏覽器會認為他是 該文件的某個版本!  ...
  • 相容現象: 在App的webview裡邊,我們有時候會在頁面里寫自定義頭部,會使用到fixed定位,我們想要的效果是,頁面無論怎麼滑動,這個自定義的頭部始終是固定在頂部的,但是在ios 11以上的版本裡邊,問題來了,當我們快速滑動頁面的時候,頁面滾動期間,這個fixed定位的頭部會隨著頁面的滑動滑上 ...
  • 因為看到百度裡面這個人回答比較生動,印象比較深刻,所以轉過來做個筆記 原文鏈接 https://zhidao.baidu.com/question/1047887004693001899.html 知乎也有更清晰解答 https://www.zhihu.com/question/23374078 1 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...