1. 程式人生 > 其它 >jQuery(四)——jQuery 的屬性操作:attr()、prop()

jQuery(四)——jQuery 的屬性操作:attr()、prop()

技術標籤:JavaWebjsjqueryjavascriptjavacheckbox

2. jQuery 的屬性操作

  1. attr() 可以設定和獲取屬性的值,不推薦操作 checked、readOnly、selected、disabled 等等
    此外,attr 方法還可以操作非標準的屬性。比如自定義屬性:abc,bbj
  2. prop() 可以設定和獲取屬性的值,只推薦操作 checked、readOnly、selected、disabled等等

2.1 attr、prop案例演示

<!DOCTYPE html>
<html lang="en">
<
head
>
<meta charset="UTF-8"> <title>jQuery-2021-01-31</title> <script type="text/javascript" src="../script/jquery-1.7.2.js"></script> <script type="text/javascript"> $(function () { alert( $(
":checkbox:first").attr("name") ); // 獲取第一個checkbox的name屬性的值 $(":checkbox:first").attr("name","checkbox3") ; // 設定第一個checkbox的name屬性的值 alert( $(":checkbox:first").attr("name") ); //再次獲取,檢測是否設定成功 attr屬性測試 checked屬性 alert
( $(":checkbox:eq(0)").attr("checked")); //返回第一個checkbox的checked屬性的值:checked alert( $(":checkbox").eq(1).attr("checked")); //返回第二個checkbox的checked屬性的值:undefined alert( $(":checkbox").eq(2).attr("checked")); //輸出checked prop屬性測試 checked屬性 alert($(":checkbox:eq(0)").prop("checked")); //輸出true alert($(":checkbox:eq(1)").prop("checked")); //輸出false alert($(":checkbox:last").prop("checked")); //輸出true });
</script> </head> <body> <input name="checkbox1" type="checkbox" checked="checked" value="checkbox1" />checkbox1 <input name="checkbox2" type="checkbox" value="checkbox2" />checkbox2 <input name="checkbox4" type="checkbox" checked="" value="checkbox4" />checkbox4 </body> </html>

對於checked屬性,只要寫了checked="",存在這樣的屬性定義,裡面不用賦值或者隨便賦值checked=""(空串)、checked=“abc”、checked=“checked”,都認為是checked=“checked”。

當獲取checked、selected、disabled等屬性,我們只關心它們是否被選中(true、false),而不關係它們具體的值,因此獲取這種屬性的值時,推薦用prop方法。

$(":checkbox:first").attr("name","checkbox3") ; 可以用attr方法設定第一個checkbox的name屬性的值

那麼怎麼設定第一個checkbox的checked屬性,使其被選中或者取消選中呢?
$(":checkbox:first").prop("checked",false ); //取消選中
$(":checkbox:eq(1)").prop("checked",true ); //被選中,true、false 不加引號
其中第二條被選中可以用val方法替代:
$(":checkbox").val(["checkbox2"]);
此時是把這三個checkbox看成一組選項,val[ ’ ’ ] 裡面填的是欲選中的該組的其中的checkbox的屬性值即可選中。
注意,這種方法只能獲取是否被選中,使之初始化時選中,不能取消選中。
個人感覺:這兩種方法:val更偏向於初始化時操作,prop使用會更多。

辨析

  1. text 和 html方法是獲取和設定標籤之間省略號部分的內容 < span >……< /span >
  2. val方法是獲取和設定ipnut便籤的內容:當input為text password時,和text方法差不多;
    當為radio單選框 、checkbox多選框、 select下拉列表時,可以判斷是否選中和沒有選中,和prop方法差不多。
  3. attr方法是可以獲得標籤的屬性的取值 < span ……> < /span>

此外,attr方法還支援自定義自己的標籤屬性給一個標籤屬性:
假設 定義給上面的checkbox1定義一個名叫DIYlable的屬性,給該屬性賦值為"my label"。

<script tyep="text/javascript">
 $(function () {
            $(":checkbox:first").attr("DIYlabel","my label");
            alert($(":checkbox").first().attr("DIYlabel"));
        });
</script>

2.2 應用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>jQuery-2021-01-31</title>
    <script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
    <script type="text/javascript">
實現功能的程式碼
    </script>
</head>
<body>
    <form method="post" action="">
		你愛好的運動是?<input type="checkbox" id="checkedAllBox" />全選/全不選
		<br />
		<input type="checkbox" name="items" value="足球" />足球
		<input type="checkbox" name="items" value="籃球" />籃球
		<input type="checkbox" name="items" value="羽毛球" />羽毛球
		<input type="checkbox" name="items" value="乒乓球" />乒乓球
		<br />
		<input type="button" id="checkedAllBtn" value="全 選" />
		<input type="button" id="checkedNoBtn" value="全不選" />
		<input type="button" id="checkedRevBtn" value="反 選" />
		
		<input type="button" id="sendBtn" value="提 交" />
	</form>
</body>
</html>

介面如圖所示:

要求實現:

  1. 全選、全不選、反選 按鈕基本功能
  2. 全選/全不選 多選框:當選中時,下面多選框也全選中;當從選中變為未選中時,下面多選框也全不選中。(主動)
  3. 一個個的選,當滿足全選的時候,全選/全部選標籤 也被選中,其他情況下,全不選或者沒選完時都不會打上。(被動)
  4. 【提交】按鈕,對選中的球進行輸出
<script type="text/javascript" src="../script/jquery-1.7.2.js"></script>
<script type="text/javascript">

        $(function () {

   1. 給 全選按鈕 繫結單擊事件,除button按鈕外,都選中 (因為這裡只有button和checkbox)
             $("#checkedAllBtn").click(function () {
                $(":checkbox").prop("checked", true);
             });     //同時,全選/全不選 也被選中

   2. 給 全不選按鈕 繫結單擊事件
             $("#checkedNoBtn").click(function () {
                 $(":checkbox").prop("checked", false);
             });      //全選/全不選 不被選中

   3. 給 反選按鈕 繫結單擊事件
             $("#checkedRevBtn").click(function () {
                 $(":checkbox").each(function () {
                     this.checked=!this.checked;
                 });// 在each遍歷的function函式中,有一個this物件。這個this物件是當前正在遍歷到的dom物件
                 //但是注意兩個的極端情況,當本身全選時,反選就是全不選;當本身全不選時,反選就是全選
                 //當反選是全選時,需要給選/全不選 input標籤 也給選上;當反選是全不選時,無影響,不考慮;
                 var allCnt=$(":checkbox[name='items']").length;
                 // 獲取全部的球類個數,是個定值, 當[name!='items']時,需要先判斷name屬性是否存在,等於時不用
                 var checkedCnt=$(":checkbox[name='items']:checked").length;
                                                // 再獲取 選中 的球類個數
                 $("#checkedAllBox").prop("checked",allCnt==checkedCnt);
                    //判斷全選/全不選 input標籤 是否選中,當選中的球類個數等於全部的時候,代表該是全選了,為true
             });

    4. 給 全選/全不選 多選框 繫結點選事件
            $("#checkedAllBox").click(function () {
               // alert(this.checked);
                //經測試得知,在該函式中的this物件,是點選多選框之後的this物件,即先點選多選框,再判斷this.checked
                //所以,當點選完選中後,同時會輸出true;不選中點選後,會輸出false,利用這一特性,不用再if判斷了
                $(":checkbox[name='items']").prop("checked",this.checked);
            });          //給所有name='items'的多選框修改屬性值

    4plus. 4存在一個問題,當一個個選,當全選時,也會觸發全選/全不選 多選框,此時再取消一個,也要判斷是不是取消全選/全不選
            //       給每個球的多選框都繫結單擊事件
            $(":checkbox[name='items']").click(function () {
               //每選中一個球,都要判斷是不是最後一個
                var allCnt=$(":checkbox[name='items']").length;
                var checkedCnt=$(":checkbox[name='items']:checked").length;
                $("#checkedAllBox").prop("checked",allCnt==checkedCnt);
            });

   5.【提交】按鈕單擊事件,對選中的球進行輸出
            $("#sendBtn").click(function () {
                $(":checkbox[name='items']:checked").each(function () {
                    alert(this.value);
                });
            });

        });
</script>