【翻译】详解HTML5 自定义 Data 属性
原标题:HTML5 Custom Data Attributes (data-*)
你是否曾经使用 class 或 rel 来保存任意的元数据,只为了使你的JavaScript更简单?如果你回答是的,那么我有一个令人激动的消息要告诉你!如果你回答不是,并且你还想,“咦,这个主意不错哦~”,那我劝你尽早放弃这个幼稚的想法,并看完本文。
多亏了HTML5,我们可以嵌入自定义的 data 属性给所有的HTML元素。这个 data 属性包含两部分:
属性名
属性名以'data-'前缀开头,并且至少要有一个字符。不可以包含大写字母。
属性值
属性值可以是任何字符串。
根据这个语法,我们可以添加应用数据信息给标签,如下所示:
<ul id="vegetable-seeds">
<li data-spacing="10cm" data-sowing-time="March to June">Carrots</li>
<li data-spacing="30cm" data-sowing-time="February to March">Celery</li>
<li data-spacing="3cm" data-sowing-time="March to September">Radishes</li>
</ul>
我们现在可以在JavaScript中使用这些保存的数据来创造更丰富有趣的用户体验。试想一下,当用户点击一颗蔬菜,一个新面板打开,向用户显示额外的种子间距和播种指示信息。因为有了data-属性,我们可以将数据添加给<li>标签,从而展示数据的时候不必进行Ajax,也不必进行服务器端的数据库查询,可以直接从属性中获取数据。
在自定义属性前使用data-前缀可以确保它会被浏览器忽略。对于浏览器和网站实际上的最终用户而言,该数据不存在。
标准上是这样说的(我们强调):
- 存储可能需要在以后的JavaScript动画计算的元素的初始高度或不透明度
- 存储通过JavaScript加载的Flash动画的参数
- 存储自定义的网页标签数据,如同Jason Karns展示的
- 存储一个元素的健康,弹药或生命数据,在JavaScript游戏中
- 推动访问JavaScript <video>字幕,如同Bruce Lawson展示的
不应该做什么?
- 如果有一个现有的属性或元素,适合你的数据存储,则不应使用数据属性。比如,在一个时间,日期/时间数据应该存放在语义化的时间元素里而不是存储在自定义数据属性里。
- 自定义数据属性不打算与微格式竞争。这在标准中清楚地说明了,数据不适合公开数据使用。外部软件不应与它进行交互。标记联系人详细信息或事件的细节使用自定义属性的数据是错的,当然,除非它是只供你自己的内部脚本使用。
- 特定数据属性的存在或缺失不应被用作任何样式的CSS钩子。这样做表明你存储的数据对用户而重要,应使用更语义化的标记。
通过JavaScript使用data-*属性
<div id='strawberry-plant' data-fruit='12'></div> <script>
// getAttribute 获取数据属性
var plant = document.getElementById('strawberry-plant');
var fruitCount = plant.getAttribute('data-fruit'); // fruitCount = '12' // setAttribute 设置数据属性
plant.setAttribute('data-fruit','7'); // 因为该死的鸟……
</script>
<div id='sunflower' data-leaves='47' data-plant-height='2.4m'></div> <script>
// dataset 获取属性
var plant = document.getElementById('sunflower');
var leaves = plant.dataset.leaves; // leaves = 47; // 'dataset 设置属性
var tallness = plant.dataset.plantHeight; // 'plant-height' -> 'plantHeight'
plant.dataset.plantHeight = '3.6m'; // 超级肥料!
</script>
plant.dataset.leaves = null; // 毛毛虫攻击!
// 选择所有带有 'data-flowering' 属性的元素
document.querySelectorAll('[data-flowering]'); // 选择所有红叶子的元素
document.querySelectorAll('[data-foliage-colour="red"]');
最后一句忠告
data-html5doctor-height 或者 data-my-plugin-height。原文地址:http://html5doctor.com/html5-custom-data-attributes/
【翻译】详解HTML5 自定义 Data 属性的更多相关文章
- HTML5自定义data属性
可能大家在使用jquery mobile时,经常会看到data-role.data-theme等的使用,比如:通过如下代码即可实现页眉的效果: [html] <div data-role=&qu ...
- 【转载】HTML5自定义data属性
可能大家在使用jquery mobile时,经常会看到data-role.data-theme等的使用,比如:通过如下代码即可实现页眉的效果: [html] <div data-role= ...
- 详解HTML5中rel属性的prefetch预加载功能使用
在HTML5中,有个很有用但常被忽略的特性,就是预先加载(prefetch),它的原理是: 利用浏览器的空闲时间去先下载用户指定需要的内容,然后缓存起来,这样用户下次加载时,就直接从缓存中取出来,效率 ...
- [转]人人网首页拖拽上传详解(HTML5 Drag&Drop、FileReader API、formdata)
人人网首页拖拽上传详解(HTML5 Drag&Drop.FileReader API.formdata) 2011年12月11日 | 彬Go 上一篇:给力的 Google HTML5 训练营( ...
- 详解 javascript中offsetleft属性的用法(转)
详解 javascript中offsetleft属性的用法 转载 2015-11-11 投稿:mrr 我要评论 本章节通过代码实例介绍一下offsetleft属性的用法,需要的朋友可以做一 ...
- (转载)详解Javascript中prototype属性(推荐)
在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...
- js(jQuery)获取自定义data属性的值
有时候因为需要在标签上设置自定义data属性值, <div class="col-sm-6 col-md-4" id="get_id" data-c_id ...
- Net is as typeof 运行运算符详解 net 自定义泛型那点事
Net is as typeof 运行运算符详解 概述 在了解运行运算符的前提我们需要了解什么是RTTI ,在任何一门面向对象的语言中,都有RTTI这个概念(即 运行时). RTTI(Run-Ti ...
- $.ajax()方法详解 ajax之async属性 【原创】详细案例解剖——浅谈Redis缓存的常用5种方式(String,Hash,List,set,SetSorted )
$.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...
随机推荐
- docker--docker仓库
8 docker仓库 Docker仓库(Repository)类似与代码仓库,是Docker集中存放镜像文件的地方. 8.1 docker hub 1.打开https://hub.docker.com ...
- [Git] 017 加一条分支,享双倍快乐
0. 回顾 [Git] 009 逆转未来 中的 "2.2" 讲过 git checkout -- <file> 这回的 git checkout <branch_ ...
- java不能卸载,提醒路劲找不到 *:\Java\
安装MyEclipse是提醒找不到java安装路劲 :*:\Java\jdk1.7.0_80 想卸载java重装也没法卸载,还是同样的提醒 找不到java安装路劲 :*:\Java\jdk1.7.0_ ...
- PY个康托展开
卡 PY 的题,和 BIT 一样,不说了 内存还卡的挺紧的? 具体而言,刚好打完的 BIT 扒过来用用,然后打个阶乘就完事儿了 没什么好说的 Code fac=[0 for i in range(10 ...
- npm发布包
一.发布一个新包第一步:进入要发布的项目根目录,初始化为npm包: npm init 依次按提示填入包名.版本.描述.github地址.关键字.license等 这步完成之后会生成一个package. ...
- java语法糖:(1)可变长度参数以及foreach循环原理
语法糖 语法糖:是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的字节码或者特定的方式对这些语法做一些处理,开发者就可以直接方便地使用 ...
- LoadPicture函数用法示例
VB语言中LoadPicture函数用法示例: 本例使用 LoadPicture 函数将图片加载到窗体的 PictureBox 控件并从控件上清除掉该图片. 要试用此例,将 PictureBox 控件 ...
- 工作中常用到的linux命令总结
linux系统ubantu debian系统下载文件:wget https://github.com/buger/goreplay/releases/download/v1.0.0/gor_1.0.0 ...
- Linux shell 误操作
shell脚本在日常运维中是必不可少会应用到,下面是自己亲身经历过的一件事.会了定期清除日志,编写了一个shell脚本,内容如下: [root@centos- tmp]# more remote_lo ...
- 原生js禁止页面滚动
// 开启.禁止页面滚动 bodyScroll: { e(e) { e.preventDefault();// 注意此处代码片段必须这样提出来已保证传入下边两个事件的处理程序一样才生效,分别写到事件处 ...