版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】如何使用HTML5自定义数据属性
为什么需要自定义数据属性?很多时候我们需要存储一些与不同DOM元素相关联的信息。这些信息对于读者来说可能是不需要的,但是可以轻松的访问这些信息将会给我们开发者的工作带来极大的便利。例如,假设你有一份某个餐饮类网站上所有餐馆的名单。在HTML5之前,如果你想存储餐馆提供的食物种类或餐馆与用户之间的距离等信息,那么你将使用HTML的class属性。但是如果你还需要存储餐馆的id以便查看用户想要访问的特定餐厅该怎么办?以下是基于HTMLclass属性的方法存在的一些问题:HTMLclass属性不是用来存储这样的数据的,其主要目的是允许开发人员给一组元素添加样式信息。我们需要为每个追加的信息向元素中添加一个新class,这使得解析JavaScript中的数据得到我们所需要的内容变得更加困难。假设给定的类名以数字开头。如果你决定稍后根据类名来设计元素的样式,那么你在样式表中将不得不回避数字或者使用属性选择器。为了解决这些问题,HTML5引入了自定义数据属性。一个元素上属性名以data-开头的属性都是数据属性。你也可以使用这些数据属性来给元素设计样式。接下来,让我们深入了解数据属性的基础知识、学习如何在CSS和JavaScript中访问数据属性的值。HTML语法如上所述,data属性的名称始终以data-开头。以下是一个例子:<li
data-type="veg"
data-distance="2miles"
data-identifier="10318">
Salad
King</li>你现在可以使用这些数据属性为你的用户搜索和排序餐厅。例如,你现在可以向他们展现在一定距离内的所有素食餐厅。除了data-前缀之外,有效的自定义数据属性的名称必须只能包含字母、数字、连字符(-)、点(。)、冒号(:)或下划线(_),不能包含大写字母。在使用数据属性时,你应该记住下面两个规则:第一:存储在这些属性中的数据应该是字符串类型。任何可以被编码为字符串类型的东西也可以存储在数据属性中。所有的类型转换都需要使用JavaScript完成。第二:数据属性应该只在没有其他合适的HTML元素或属性时使用。例如,使用data-class属性存储元素class属性的值是不恰当的。一个元素可以具有任意数量的数据属性,这些数据属性也可以具有任何所需要的值。数据属性与CSS你可以根据数据属性使用CSS中的属性选择器来为元素设计样式。你还可以借助attr()函数将数据属性中存储的信息显示给用户(以工具提示或其他方式)。设计元素样式现在回到我们餐厅的例子,你可以使用数据属性向用户提供关于餐厅类型或者他们与餐厅之间的距离等信息,或者为餐厅设计不同的背景颜色。以下是一个例子:li[data-type='veg']
{
background:
#8BC34A;
}li[data-type='french']
{
background:
#3F51B5;
}HTML代码:<h3>Restaurants
in
New
York</h3><div
class="hint"><span
class="french"></span><span>French</span></div><div
class="hint"><span
class="veg"></span><span>Vegetarian</span></div><div
class="hint"><span
class="german"></span><span>German</span></div><ul>
<li
data-type="veg"
data-distance="2miles"
data-identifier="10318">Bloss</li>
<li
data-type="german"
data-distance="3miles"
data-identifier="10318">Heidelberg</li>
<li
data-type="french"
data-distance="1mile"
data-identifier="10318">Daniel</li>
<li
data-type="veg"
data-distance="4miles"
data-identifier="10548">Dirt
Candy</li>
<li
data-type="french"
data-distance="3miles"
data-identifier="10318">La
Grenouille</li>
<li
data-type="french"
data-distance="1mile"
data-identifier="10318">Balthazar</li>
<li
data-type="veg"
data-distance="2miles"
data-identifier="12315">Angelica
Kitchen</li>
<li
data-type="german"
data-distance="1mile"
data-identifier="10318">Blaue
Gans</li>
<li
data-type="german"
data-distance="2miles"
data-identifier="12315">Reichenbach
Hall</li></ul>CSS代码:html
{
font-family:
'Lato';
margin:
20px
auto;
max-width:
600px;
font-size:
1.25em;
}ul
{
list-style:
none;
padding:
0;
}li
{
padding:
5px
10px;
margin:
5px
0;
color:
white;
border-radius:
5px;
}.hint
{
margin-right:
30px;
display:
inline-block;
}span.french,
span.veg,
span.german
{
width:
15px;
height:
15px;
border-radius:
50%;
display:
inline-block;
float:
left;
margin-top:
5px;
margin-right:
5px;
}span.french
{
background:
#3F51B5;
}span.veg
{
background:
#8BC34A;
}span.german
{
background:
#bb6666;
}li[data-type='veg']
{
background:
#8BC34A;
}li[data-type='french']
{
background:
#3F51B5;
}li[data-type='german']
{
background:
#bb6666;
}效果图:创建工具提示你可以使用工具提示向用户显示一些与元素相关的附加信息。但是因为纯CSS的工具提示不能完全使用,所以我建议你在简单的模型上使用这种方法而不是在一个产品型的网站上。你要显示的信息可以存储在一个data-tooltip属性中。<span
data-tooltip="A
simple
explanation">Word</span>然后,你可以使用::before伪元素将数据呈现给用户。span::before
{
content:
attr(data-tooltip);
//
其余的样式规则}span:hover::before
{
display:
inline-block;
}HTML代码:<p>The
gray
wolf,
also
known
as
the
<span
class="tooltip"
data-tooltip="some
more
information"><span
class="tooltip-info">some
more
information
</span>timber
wolf</span>
or
western
wolf,
is
a
canine
native
to
the
wilderness
and
remote
areas
of
Eurasia
and
<span
class="tooltip"
data-tooltip="some
more
information"><span
class="tooltip-info">some
more
information
</span>North
America</span>.
It
is
the
largest
extant
member
of
its
family,
with
males
averaging
43–45
kg
(95–99
lb),
and
females
36–38.5
kg
(79–85
lb).
Like
the
red
wolf,
it
is
distinguished
from
other
<span
class="tooltip"
data-tooltip="some
more
information"><span
class="tooltip-info">some
more
information</span>Canis
species</span>
by
its
larger
size
and
less
pointed
features,
particularly
on
the
ears
and
muzzle.</p>CSS代码:html
{
font-family:
'Lato';
margin:
20px
auto;
line-height:
1.5;
max-width:
600px;
font-size:
1.25em;
}span.tooltip
{
padding:
0px
5px;
position:
relative;
background:
#FFBB99;
cursor:
pointer;
}.tooltip-info
{
position:
absolute;
top:
-9999px;
left:
-9999px;
}span.tooltip::before
{
content:
attr(data-tooltip);
position:
absolute;
top:
1.5em;
font-size:
0.9em;
padding:
1px
5px;
display:
none;
color:
white;
background:
rgba(0,
0,
0,
0.75);
border-radius:
4px;
transition:
opacity
0.1s
ease-out;
z-index:
99;
text-align:
left;
}span:hover::before
{
display:
inline-block;
}效果图(鼠标移入淡红色的区域会出黑色背景的提示):使用JavaScript访问数据属性在JavaScript中有三种方式访问数据属性。使用getAttribute和setAttribute你可以使用JavaScript中的getAttribute()和setAttribute()来获取和设置不同数据属性的值。如果给定的属性不存在,该getAttribute方法将返回null或一个空字符串。以下是使用这些方法的示例:var
restaurant
=
document.getElementById("restaurantId");var
ratings
=
restaurant.getAttribute("data-ratings");你可以使用该setAttribute方法修改现有属性的值或添加新属性。restaurant.setAttribute("data-owner-name",
"someName");使用dataset属性访问数据属性的一种更为简单的方法是借助dataset属性。此属性返回一个DOMStringMap对象,此对象拥有一个包含所有自定义数据属性的目录。使用
dataset属性时,你应该记住下面这些步骤:将自定义数据属性转换为DOMStringMap的键值需要三个步骤:将该data-前缀从属性名中删除将任何后跟小写字母的连字符从名称中删除,并将其后面的字母转换为大写字母(即驼峰命名法——译者注)其他字符保持不变。这意味着任何没有被小写字母跟着的连字符也将保持不变。然后可以使用存储在对象中按照驼峰命名法命名的名称作为键来访问属性,如element.dataset.keyname。访问属性的另一种方法是使用括号符号,如
element.dataset[keyname]。考虑以下的HTML代码:<li
data-type="veg"
data-distance="2miles"
data-identifier="10318"
data-owner-name="someName">
Salad
King
</li>以下是几个例子:var
restaurant
=
document.getElementById("restaurantId");var
ratings
=
restaurant.dataset.ratings;
restaurant.dataset.ratings
=
newRating;var
owner
=
restaurant.dataset['ownerName'];
restaurant.dataset['ownerName']
=
'newOwner';现在所有的主流浏览器都支持这种方法。相比之前访问自定义数据属性的方法,你应该更喜欢这种方法。使用jQuery你也可以使用jQuery的data()方法来访问元素的数据属性。在jQuery1.6之前,你必须使用以下代码来访问数据属性:var
restaurant
=
$("#restaurantId");var
owner
=
restaurant.data("owner-name");
restaurant.data("owner-name",
"newName");从版本1.6开始,jQuery使用驼峰命名法版本的数据属性。现在,你可以使用以下代码来做同样的事情:var
restaurant
=
$("#restaurantId");var
owner
=
restaurant.data("ownerName");
restaurant.data("ownerName",
"newName");你应该知道,jQuery内部还试图将从数据属性中获取的字符串转换成合适
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年版房地产买卖合同模板
- 2024年港口疏浚及堤坝修建合同3篇
- 劳动合同书电子版
- 水甲苯精馏塔课程设计
- 插班课程设计案例分析
- 管道课程设计小结
- 航空物流课程设计
- 航天研学课程设计
- 烘焙网络营销课程设计
- 机械小车课程设计
- 中国铝业股份有限公司河南分公司巩义市山川铝土矿矿山地质环境保护与土地复垦方案
- 工商企业管理毕业论文范文六篇
- 二十五项反措检查表优质资料
- 保密办主任工作总结保密办主任工作总结八篇
- 新生儿沐浴及抚触护理
- 机械原理课程设计-压床机构的设计
- 教学案例 英语教学案例 市赛一等奖
- 四川省2023职教高考英语试题
- JJG 913-2015浮标式氧气吸入器
- GB/T 12190-2006电磁屏蔽室屏蔽效能的测量方法
- 2020年贵州专升本高等数学真题及答案
评论
0/150
提交评论