jquery中arrt()和prop()的區別

来源:https://www.cnblogs.com/chenjun1/archive/2019/09/25/11587550.html
-Advertisement-
Play Games

本文轉自https://www.cnblogs.com/songdongdong/p/6340373.html 在jQuery中,attr()函數和prop()函數都用於設置或獲取指定的屬性,它們的參數和用法也幾乎完全相同。 但不得不說的是,這兩個函數的用處卻並不相同。下麵我們來詳細介紹這兩個函數之 ...


本文轉自https://www.cnblogs.com/songdongdong/p/6340373.html

 

在jQuery中,attr()函數和prop()函數都用於設置或獲取指定的屬性,它們的參數和用法也幾乎完全相同。

但不得不說的是,這兩個函數的用處卻並不相同。下麵我們來詳細介紹這兩個函數之間的區別。

1、操作對象不同

很明顯,attrprop分別是單詞attributeproperty的縮寫,並且它們均表示"屬性"的意思。

不過,在jQuery中,attributeproperty卻是兩個不同的概念。attribute表示HTML文檔節點的屬性,property表示JS對象的屬性。

複製代碼 複製代碼
1 <!-- 這裡的id、class、data_id均是該元素文檔節點的attribute -->
2 <div id="message" class="test" data_id="123"></div>
3 
4 <script type="text/javascript">
5 // 這裡的name、age是Person的property
6 var Person = { name: "小明", age: 18};
7 </script>
複製代碼 複製代碼

在jQuery中,prop()函數的設計目標是用於設置或獲取指定DOM元素(指的是JS對象,Element類型)上的屬性(property);attr()函數的設計目標是用於設置或獲取指定DOM元素所對應的文檔節點上的屬性(attribute)。

2、應用版本不同

attr()jQuery 1.0版本就有的函數,prop()jQuery 1.6版本新增的函數。毫無疑問,在1.6之前,你只能使用attr()函數;1.6及以後版本,你可以根據實際需要選擇對應的函數。

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

由於attr()函數操作的是文檔節點的屬性,因此設置的屬性值只能是字元串類型,如果不是字元串類型,也會調用其toString()方法,將其轉為字元串類型。

prop()函數操作的是JS對象的屬性,因此設置的屬性值可以為包括數組和對象在內的任意類型。

4、其他細節問題

在jQuery 1.6之前,只有attr()函數可用,該函數不僅承擔了attribute的設置和獲取工作,還同時承擔了property的設置和獲取工作。例如:在jQuery 1.6之前,attr()也可以設置或獲取tagName、className、nodeName、nodeType等DOM元素的property。

直到jQuery 1.6新增prop()函數,並用來承擔property的設置或獲取工作之後,attr()才只用來負責attribute的設置和獲取工作。

此外,對於表單元素的checkedselecteddisabled等屬性,在jQuery 1.6之前,attr()獲取這些屬性的返回值為Boolean類型:如果被選中(或禁用)就返回true,否則返回false

但是從1.6開始,使用attr()獲取這些屬性的返回值為String類型,如果被選中(或禁用)就返回checkedselecteddisabled,否則(即元素節點沒有該屬性)返回undefined。並且,在某些版本中,這些屬性值表示文檔載入時的初始狀態值,即使之後更改了這些元素的選中(或禁用)狀態,對應的屬性值也不會發生改變。

因為jQuery認為:attribute的checkedselecteddisabled就是表示該屬性初始狀態的值,property的checkedselecteddisabled才表示該屬性實時狀態的值(值為truefalse)。

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

複製代碼 複製代碼
   <button>按鈕</button>
    <input type="checkbox" name="" id="" checked="checked">
    <script src="jquery.js"></script>
    <script>
        // $('button').on('click',function(){

        // });
        // var r = $('input');
        $('button').on('click',function(){
            console.log(11)
            if ($('input').prop('checked')) {
                $('input').prop('checked',false);
            }else{
                $('input').prop('checked',true);
            }
        })
    </script>
複製代碼 複製代碼

// attr / prop
// attr ==> getAttribute() / setAttribute()
// 用於操作 自定義的屬性,對於DOM對象自身的布爾值類型的屬性,只能
// 通過這個兩個方法來設置或者讀取預設值,而不能動態改變值
// 
// prop ==> dom.checked = true;
// 對於 布爾值的屬性(selected/checked/diabled) 都需要通過直接訪問屬性
// 方式來操作(點語法、[])

 

大家都知道原生js可以獲取匹配元素的內部html和外部html,內部是innerHTML,外部是outerHTML,原生js的dom對象是存在這兩個屬性的,

document.getElementById("linkType").outerHTML;

如果用jQuery如何獲取匹配元素(包括自身元素的html)呢?

既然存在這個屬性,我們就可以用$("#linkType").prop("outerHTML")來獲取;

可以通過$("#linkType").prop("outerHTML",outerHTML)賦值來改變outerHTML的內容;

值得註意的是jQuery的attr是獲取不到這個屬性值的。


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

-Advertisement-
Play Games
更多相關文章
  • 在MySQL中,無論是Innodb還是MyIsam,都使用了B+樹作索引結構(這裡不考慮hash等其他索引)。本文將從最普通的二叉查找樹開始,逐步說明各種樹解決的問題以及面臨的新問題,從而說明MySQL為什麼選擇B+樹作為索引結構。 ...
  • 本文鏈接: "Android MediaPlayer 倍速播放,調整播放速度" 現在市面上的很多音視頻App都有倍速播放的功能,例如把播放速度調整為0.5、1.5、2倍等等。 從Android API 23 (Android M)開始,MediaPlayer支持調整播放速度。 使用的方法是setPl ...
  • // Method Swizzling 的最佳實踐 // 下麵我們就以替換 viewWillAppear 方法為例談談 Method Swizzling 的最佳實踐,話不多說,直接上代碼: 下麵我們就一起來分析下這三個為什麼到底是為了什麼? 第 1 個為什麼:看過我前面文章《Objective-C ...
  • 推薦Android入門書籍:第一行代碼(郭霖) google官方文檔地址:https://developer.android.google.cn/guide/components/activities CoordinatingActivities Activity ================= ...
  • super performSelector: 解決調用父類私有方法的問題 ...
  • 先來說微信小程式原生的請求介面方式吧,如官網文檔,在頁面中請求直接調用 在這裡感謝接的是提供的免費介面https://blog.csdn.net/c__chao/article/details/78573737 好了,不如正題說一下Flyio,依葫蘆畫瓢寫了一下 1.首先安裝flyio 2.引入fl ...
  • 前言 經常會在一些網站或博客看到“深克隆”,“淺克隆”這兩個名詞,其實這個很好理解,今天我們就在這裡分析一下 。 淺拷貝 我們先以一個例子來說明js淺拷貝: 上面顯然 的值會變為 12,這就是js淺拷貝。 淺拷貝只是拷貝的指向對象的指針,本質上還是指向同一個對象。 深拷貝 同樣我們還是以一個例子來說 ...
  • 一、 在預設佈局的垂直方向上,預設情況下外邊距是是不會疊加的,會出現合併現象,誰的外邊距較大,就聽誰的;但是在水平方向就不會出現這種狀況,我們舉個例子 二、盒子模型 1.什麼是盒子模型 答:CSS盒子模型僅僅一個比較形象地比喻,HTML中所有的標簽都是盒子,我們現實生活中的物品大多都是有位置區域劃分 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...