摘要:刪除這個簡單的使用場景就描述了如何工作。如果你將一個對象直接存儲在其中是不行的,但對對象進行序列化處理后,還是可以的。
寫過HTML5頁面,或者做過H5開發的同學或多或少都接觸過data-*這個自定義Attribute(對Attribute和property還分不太清的同學,可以看一看傻傻的分也分不清楚的property和attribute)這篇文章。
在做微信公眾號開發的時候你一定看到過下圖的情況:
我之前做過一個微信圖文編輯器,用到過不少這樣的情況。
在一些電商網站的源碼中也看到過如下圖的情況:
在移動端的開發中,我們經常會使用這種情況,如媒體資源(圖片,視頻)的優化處理上
還有就是我們前端開發都接觸過的bootstrap框架,在插件的引用上就是使用的 data-*,那么它的魅力何在呢?
HTML5 data-* 由來在HTML5出現之前我們處理一些被引入的數據是通過用的 class Attribute 或者元素自帶的 attribute,或者開發人員自定義一些數據屬性。
這樣操作數據很不方便,如何在頁面內處理數據更方便,成了開發人員苦惱的問題,在HTML5出現后你就不用在擔心了。
w3c data-attribute 規范
HTML5 data-* 如何工作我們可以在一個列表項中存儲一個用戶的信息,如下:
這些數據對于頁面的訪問者來說用處不大,因為用戶看不到,但是它對于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-*
// htmlconfigure js插件的配置項移動端內容// css div[data-role="mobile"] { display:block; }
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
摘要:超詳細并且帶的跨域指南來了本文基于你了解的同源策略,并且了解使用跨域跨域的理由。使用方法就是將符合上述條件頁面的設置為同樣的二級域名。這兩個網站都是協議,端口都是,且二級域名都是。 超詳細并且帶 Demo 的 JavaScript 跨域指南來了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由。 1. JSONP 首先要介紹的跨域方法必然是 JSONP。 ...
摘要:定義字符中文注音或字符的解釋或發音。表單域我們都知道標簽用于為用戶輸入創建表單。在中表單域添加了兩個新的屬性規定是否啟用表單的自動完成功能,默認。通過屬性和表單域的可以將輸入表單綁定到表單域中。 showImg(http://ww1.sinaimg.cn/large/007kscFEgy1fxgnw4hajoj31400p0q4d.jpg); 1. 認識HTML5 HTML5并不僅僅...
閱讀 990·2021-09-26 10:15
閱讀 2072·2021-09-24 10:37
閱讀 2584·2019-08-30 13:46
閱讀 2635·2019-08-30 11:16
閱讀 2424·2019-08-29 10:56
閱讀 2596·2019-08-26 12:24
閱讀 3479·2019-08-23 18:26
閱讀 2665·2019-08-23 15:43