国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

HTML5中的 `data-*` 如何處理數據詳解

khlbat / 2338人閱讀

摘要:刪除這個簡單的使用場景就描述了如何工作。如果你將一個對象直接存儲在其中是不行的,但對對象進行序列化處理后,還是可以的。

寫過HTML5頁面,或者做過H5開發的同學或多或少都接觸過data-*這個自定義Attribute(對Attribute和property還分不太清的同學,可以看一看傻傻的分也分不清楚的property和attribute)這篇文章。

在做微信公眾號開發的時候你一定看到過下圖的情況:

我之前做過一個微信圖文編輯器,用到過不少這樣的情況。

在一些電商網站的源碼中也看到過如下圖的情況:

在移動端的開發中,我們經常會使用這種情況,如媒體資源(圖片,視頻)的優化處理上

還有就是我們前端開發都接觸過的bootstrap框架,在插件的引用上就是使用的 data-*,那么它的魅力何在呢?

HTML5 data-* 由來

在HTML5出現之前我們處理一些被引入的數據是通過用的 class Attribute 或者元素自帶的 attribute,或者開發人員自定義一些數據屬性。

這樣操作數據很不方便,如何在頁面內處理數據更方便,成了開發人員苦惱的問題,在HTML5出現后你就不用在擔心了。

w3c data-attribute 規范

HTML5 data-* 如何工作

我們可以在一個列表項中存儲一個用戶的信息,如下:

  • lvzhenbang
  • 這些數據對于頁面的訪問者來說用處不大,因為用戶看不到,但是它對于web應用的開發者很有用。這時你可以想象一下增加一個刪除按鈕,這個按鈕可以刪除列表中的某個用戶,通過用戶的數據信息 data-id ,你不需要其他的相關東西或者屬性,就可以直接向后端發送請求刪除該用戶。

    
    

    這個簡單的使用場景就描述了 data-* 如何工作。

    用 HTML5 data-* 能存儲些什么

    data-* 雖然是個好東西,但它不是萬能的,它本身還是 [Attribute](https://github.com/lvzhenbang/article/blob/master/js/porp-attr.md) ,而 Attribute 就是只能存儲字符串類型數據。如果你將一個對象直接存儲在其中是不行的,但對對象進行序列化處理后,還是可以的。

    用JavaScript來reading/writing data-*
    // 用戶信息的操作按鈕
    var oBtn = document.getElementById("opt-btn");
    // 刪除按鈕
    var delBtn = document.getElementById("delte-btn");
    // 獲得信息
    var id = oBtn.getAttribute("data-id");
    // 改變數據信息
    delBtn.setAttribute("data-id", id);
    

    是不是很簡單,然后你就可以通過AJAX向后端請求,做你想要做的事情了。

    用jQuery來reading/writing data-*

    在jQuery中有一個 .attr() 方法就可以解決讀寫data數據的功能了。

    // 獲得用戶信息的操作按鈕
    var oBtn = $("#opt-btn");
    // 獲得刪除按鈕
    var delBtn = $("#delte-btn");
    // 獲得操作的信息
    var id = oBtn.attr("data-id");
    // 改變刪除按鈕的數據信息
    delBtn.attr("data-id", id);
    

    熟悉jQuery的你可能會想到不是還有一個 .data() 方法嗎? 雖然 .attr().data() 在操作 data-* 上有一些重疊,但他們完全是兩回事。沒有深入理解的同學,只需要知道 .attr() 就好了。

    HTML5 有原生的API dataset 來reading/writing data-*

    HTML5 就是開發就是這樣方便,但它存在一些兼容性問題,IE系列的瀏覽器不支持。但是時代在進步,這些奇葩的瀏覽器最終會成為歷史,所以還是有必要說兩句。

    // 獲得用戶信息的操作按鈕
    var oBtn = document.getElementById("opt-btn");
    // 獲得刪除按鈕
    var delBtn = document.getElementById("delte-btn");
    // 獲得操作的信息
    var id = oBtn.dataset.id;
    // 改變刪除按鈕的數據信息
    delBtn.setAttribute.id = id;
    

    值得注意的是這里沒有數據前綴和 -,類似于我們在JavaScript中操作css屬性的方式,我們在使用dataset API時,你在HTML中用 data-some-attribute-name,但在JavaScript中你需要用 dataset.someAttributeName 這樣的駝峰形式。

    用 HTML5 data-* 能做些什么事情呢

    這里有幾個簡單的例子,僅供參考學習。

    過濾

    這其實是一個簡化版的模糊查詢,我曾經再一次面使用遇到過這樣的問題,就是讓回答如何做一個簡單的模糊查詢。

    假如你有一個如下面所示的demo,你想要通過濾每個用戶的關鍵字來篩選用戶。只要你將它們的關鍵字放入 data attribute 中,然后編寫一個簡短的腳本循環并顯示/隱藏它們即可。

    html

    
    
    • 王明
    • 張華
    • 王麗
    • 王大牛
    • 王小二
    • 張麗

    js

    $("#filter").on("keyup", function() {
        var keyword = $(this).val().toLowerCase();
        $(".person > li").each( function() {
            $(this).toggle( keyword.length < 1 || $(this).attr("data-models").indexOf(keyword) > -1 );
        });
    });
    

    demo演示

    style 樣式

    毫無疑問你可以使用 class 來定義樣式,但是你也可以用 data-* 來應用樣式(不用管data數據的值):

    HTML

    
    

    CSS

    [data-warning] {
        background: red;
    }
    

    但是如果你想依據數據屬性的值呢?你可以這樣使用:

    [data-warning*=error] {
        color: red;
    }
    
    [data-warning*=update] {
        color: green;
    }
    
    [data-warning*=modify] {
        color: blue;
    }
    

    上面的使用是不是很熟悉,相信研究過bootstrap的同學對此應該不會陌生。

    可參考bootstrap中將link轉化為按鈕

    demo演示

    響應式開發

    在做響應式開發的過程中我們不僅可以使用媒體查詢,我們還可以用 data-*

    // html
    
    移動端內容
    // css div[data-role="mobile"] { display:block; }
    configure js插件的配置項

    BootStrap用自定義數據屬性作為可選擇的配置項來配置插件。一個 popover 例子如下:

    
    
    和偽元素的結合實現tool Tip
    // html
    數據屬性
    
    // css
    .tooltip {
      position: relative;
      display: inline-block;
      padding: 4px 8px;
      color: white;
      background-color: green;
      border-radius: 2px;
      cursor: pointer;
    }
    
    .tooltip::after {
      position: absolute;
      top: 110%;
      left: 0;
      content: attr(data-tooltip);
      display: none;
      width: 200%;
      padding: 6px 12px;
      color: white;
      background-color: rgba(0, 0, 0, 0.75);
      border-radius: 6px;
    }
    
    .tooltip:hover::after {
      display: inline-block;
    }
    

    demo演示:

    什么時候應該用

    1.js動畫計算中可能需要的元素初始寬高,透明度等樣式

    2.Flash加載Flash電影的的存儲參數,也包括(img/video/audio)

    3.在游戲開發中存儲一些人物屬性的數據

    4.web統計標簽數據的證明(也就是我們常用的給元素取一個為一名字,方便統計)

    什么時候不應該用

    1.不要用它來替換一個現有的屬性或元素。如下:

    8pm
    

    我們應該像下面這樣定義:

    
    

    2.數據屬性不應該用作meta data 和 micro format的替代品。

    micro format 被設計給人類用的,是被引入給我們的標記上下文的。例如:如果你有一張Vcard用來記錄個人或組織的聯系信息,那么你將會給這張Vcard一個類,讓機器理解這是一個聯系信息。代碼如下:

    Aaron Lumsden

    而不是像下面的代碼:

    Aaron Lumsden

    想要了解更多的micro format您可以訪問 microformats.org

    3.他僅限于網站或app的內部使用,而不能用在外部,外部的用一個XML/RSS

    結束語

    data-*在web上已經被廣泛的應用。令人興奮的是,他們在舊瀏覽器上依然運行良好,并遵循web的標準,這意味著你不用擔心兼容性的問題。但是如果你試圖用 data-* 以便于樣式獲取data-*的值話,那么只有支持css3選擇器的瀏覽器支持這一功能。

    想要了解更多你可以看看這些文章

    Working with HTML5 data attributes

    All You Need to Know About the HTML5 Data Attribute

    HTML5 Custom Data Attributes data-*

    文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

    轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90434.html

    相關文章

    • 「JavaScript」JS四種跨域方式詳解

      摘要:超詳細并且帶的跨域指南來了本文基于你了解的同源策略,并且了解使用跨域跨域的理由。使用方法就是將符合上述條件頁面的設置為同樣的二級域名。這兩個網站都是協議,端口都是,且二級域名都是。 超詳細并且帶 Demo 的 JavaScript 跨域指南來了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由。 1. JSONP 首先要介紹的跨域方法必然是 JSONP。 ...

      wangym 評論0 收藏0
    • HTML5 入門詳解

      摘要:定義字符中文注音或字符的解釋或發音。表單域我們都知道標簽用于為用戶輸入創建表單。在中表單域添加了兩個新的屬性規定是否啟用表單的自動完成功能,默認。通過屬性和表單域的可以將輸入表單綁定到表單域中。 showImg(http://ww1.sinaimg.cn/large/007kscFEgy1fxgnw4hajoj31400p0q4d.jpg); 1. 認識HTML5 HTML5并不僅僅...

      hqman 評論0 收藏0

    發表評論

    0條評論

    khlbat

    |高級講師

    TA的文章

    閱讀更多
    最新活動
    閱讀需要支付1元查看
    <