HTML attribute特性和DOM property屬性的區別

2019-9-4更新:
Angular官方文檔中的解釋

詳解 HTML attribute 和 DOM property,作者:justjavac

  1. 特性attributes的範圍更大,包括標籤的標準屬性和自定義加入的非標準的屬性。
  2. 當瀏覽器解析網頁時,將 HTML 特性映射爲了 DOM 屬性
  3. 可以從DOM 對象添加屬性
  4. 當 HTML 特性映射爲 DOM 屬性時,只映射標準屬性,訪問非標準屬性將得到 undefined。
    DOM 對象也提供了操作特性的 API,可以從attributes獲取非標準的屬性。
  5. 特性永遠都是字符串或 null
  6. data- 開頭的屬性
  7. input.value 的同步是單向的,只是 attribute --> property

attr——映射到prop

HTML標籤的屬性——初始狀態
checked 是個布爾值,只要存在該屬性即爲true
checked=”checked”或checked=其它任意數據類型(false、空字符串), 賦的只是字面量,不改變本身的屬性值true

prop——不會影響attr

DOM元素的特性——實時狀態
<input>標籤裏有checked, prop的值即爲true
通過在瀏覽器點選,改變checked作爲prop的值,不會改變checked作爲attr的值

以下爲示例:

<!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>attr and prop</title>
        <script src="jquery-3.2.1.min.js" type="text/javascript"></script>
    </head>
    <body>
        <fieldset class="sports1">
            <h2>你愛好的運動是?</h2>
            <!--checked的“=”右邊即使設爲空,甚至false,這只是字面量,本身的值還是true,被選中,checked的property屬性爲true-->
            <input type="checkbox" checked = "checked" name="items" value="足球" />
            <label for="football">足球</label> 
            <input type="checkbox" checked = "任意字面量" name="items" value="籃球" />
            <label for="basketball">籃球</label>
            <input type="checkbox" name="items" value="羽毛球" />
            <label for="badminton">羽毛球 </label>
            <input type="checkbox" name="items" value="乒乓球" />
            <label for="pingpang">乒乓球</label>
            <br />
            <input type="button" id="checkedAll" value="全 選" />
            <input type="button" id="checkedNo" value="全不選" /> 
            <input type="button" id="checkedRev" value="反 選" />
            <input type="submit" id="send" value="提 交" />                
        </fieldset>

        <script>
            $(function() {
                $items = $(".sports1 :checkbox");
                $("#checkedAll").click(function() {
                    //attr相當於設置初始狀態,如果初始沒有出現checked,這裏給checked的boolean屬性設置爲true,相當於給所有input加了checked屬性且boolean值爲true, 此時checked的property值也爲true
                    //$items.attr("checked", true);
                    $items.prop("checked", true);
                });
                $("#checkedNo").click(function() {
                    // attr相當於設置初始狀態,這裏給checked的布爾屬性設置爲false,相當於移除了每個input裏的checked屬性,checked的property特性相應地變爲false; 
                    // 但是如果狀態被選中過,checked的property特性變爲了true,checked的布爾屬性設置設爲false並不會改變checked的property特性爲true,所以狀態還是選中的。
                    // $items.attr("checked", false);
                    $items.prop("checked", false);
                });
                $("#checkedRev").click(function() {
                    $items.each(function() {
                        //這裏也是property特性
                        this.checked = !this.checked;
                    });
                });
            });
        </script>
    </body>
</html>       
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章