版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
【移動(dòng)應(yīng)用開(kāi)發(fā)技術(shù)】如何使用HTML5自定義數(shù)據(jù)屬性
為什么需要自定義數(shù)據(jù)屬性?很多時(shí)候我們需要存儲(chǔ)一些與不同DOM元素相關(guān)聯(lián)的信息。這些信息對(duì)于讀者來(lái)說(shuō)可能是不需要的,但是可以輕松的訪問(wèn)這些信息將會(huì)給我們開(kāi)發(fā)者的工作帶來(lái)極大的便利。例如,假設(shè)你有一份某個(gè)餐飲類網(wǎng)站上所有餐館的名單。在HTML5之前,如果你想存儲(chǔ)餐館提供的食物種類或餐館與用戶之間的距離等信息,那么你將使用HTML的class屬性。但是如果你還需要存儲(chǔ)餐館的id以便查看用戶想要訪問(wèn)的特定餐廳該怎么辦?以下是基于HTMLclass屬性的方法存在的一些問(wèn)題:HTMLclass屬性不是用來(lái)存儲(chǔ)這樣的數(shù)據(jù)的,其主要目的是允許開(kāi)發(fā)人員給一組元素添加樣式信息。我們需要為每個(gè)追加的信息向元素中添加一個(gè)新class,這使得解析JavaScript中的數(shù)據(jù)得到我們所需要的內(nèi)容變得更加困難。假設(shè)給定的類名以數(shù)字開(kāi)頭。如果你決定稍后根據(jù)類名來(lái)設(shè)計(jì)元素的樣式,那么你在樣式表中將不得不回避數(shù)字或者使用屬性選擇器。為了解決這些問(wèn)題,HTML5引入了自定義數(shù)據(jù)屬性。一個(gè)元素上屬性名以data-開(kāi)頭的屬性都是數(shù)據(jù)屬性。你也可以使用這些數(shù)據(jù)屬性來(lái)給元素設(shè)計(jì)樣式。接下來(lái),讓我們深入了解數(shù)據(jù)屬性的基礎(chǔ)知識(shí)、學(xué)習(xí)如何在CSS和JavaScript中訪問(wèn)數(shù)據(jù)屬性的值。HTML語(yǔ)法如上所述,data屬性的名稱始終以data-開(kāi)頭。以下是一個(gè)例子:<li
data-type="veg"
data-distance="2miles"
data-identifier="10318">
Salad
King</li>你現(xiàn)在可以使用這些數(shù)據(jù)屬性為你的用戶搜索和排序餐廳。例如,你現(xiàn)在可以向他們展現(xiàn)在一定距離內(nèi)的所有素食餐廳。除了data-前綴之外,有效的自定義數(shù)據(jù)屬性的名稱必須只能包含字母、數(shù)字、連字符(-)、點(diǎn)(。)、冒號(hào)(:)或下劃線(_),不能包含大寫(xiě)字母。在使用數(shù)據(jù)屬性時(shí),你應(yīng)該記住下面兩個(gè)規(guī)則:第一:存儲(chǔ)在這些屬性中的數(shù)據(jù)應(yīng)該是字符串類型。任何可以被編碼為字符串類型的東西也可以存儲(chǔ)在數(shù)據(jù)屬性中。所有的類型轉(zhuǎn)換都需要使用JavaScript完成。第二:數(shù)據(jù)屬性應(yīng)該只在沒(méi)有其他合適的HTML元素或?qū)傩詴r(shí)使用。例如,使用data-class屬性存儲(chǔ)元素class屬性的值是不恰當(dāng)?shù)?。一個(gè)元素可以具有任意數(shù)量的數(shù)據(jù)屬性,這些數(shù)據(jù)屬性也可以具有任何所需要的值。數(shù)據(jù)屬性與CSS你可以根據(jù)數(shù)據(jù)屬性使用CSS中的屬性選擇器來(lái)為元素設(shè)計(jì)樣式。你還可以借助attr()函數(shù)將數(shù)據(jù)屬性中存儲(chǔ)的信息顯示給用戶(以工具提示或其他方式)。設(shè)計(jì)元素樣式現(xiàn)在回到我們餐廳的例子,你可以使用數(shù)據(jù)屬性向用戶提供關(guān)于餐廳類型或者他們與餐廳之間的距離等信息,或者為餐廳設(shè)計(jì)不同的背景顏色。以下是一個(gè)例子: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;
}效果圖:創(chuàng)建工具提示你可以使用工具提示向用戶顯示一些與元素相關(guān)的附加信息。但是因?yàn)榧僀SS的工具提示不能完全使用,所以我建議你在簡(jiǎn)單的模型上使用這種方法而不是在一個(gè)產(chǎn)品型的網(wǎng)站上。你要顯示的信息可以存儲(chǔ)在一個(gè)data-tooltip屬性中。<span
data-tooltip="A
simple
explanation">Word</span>然后,你可以使用::before偽元素將數(shù)據(jù)呈現(xiàn)給用戶。span::before
{
content:
attr(data-tooltip);
//
其余的樣式規(guī)則}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;
}效果圖(鼠標(biāo)移入淡紅色的區(qū)域會(huì)出黑色背景的提示):使用JavaScript訪問(wèn)數(shù)據(jù)屬性在JavaScript中有三種方式訪問(wèn)數(shù)據(jù)屬性。使用getAttribute和setAttribute你可以使用JavaScript中的getAttribute()和setAttribute()來(lái)獲取和設(shè)置不同數(shù)據(jù)屬性的值。如果給定的屬性不存在,該getAttribute方法將返回null或一個(gè)空字符串。以下是使用這些方法的示例:var
restaurant
=
document.getElementById("restaurantId");var
ratings
=
restaurant.getAttribute("data-ratings");你可以使用該setAttribute方法修改現(xiàn)有屬性的值或添加新屬性。restaurant.setAttribute("data-owner-name",
"someName");使用dataset屬性訪問(wèn)數(shù)據(jù)屬性的一種更為簡(jiǎn)單的方法是借助dataset屬性。此屬性返回一個(gè)DOMStringMap對(duì)象,此對(duì)象擁有一個(gè)包含所有自定義數(shù)據(jù)屬性的目錄。使用
dataset屬性時(shí),你應(yīng)該記住下面這些步驟:將自定義數(shù)據(jù)屬性轉(zhuǎn)換為DOMStringMap的鍵值需要三個(gè)步驟:將該data-前綴從屬性名中刪除將任何后跟小寫(xiě)字母的連字符從名稱中刪除,并將其后面的字母轉(zhuǎn)換為大寫(xiě)字母(即駝峰命名法——譯者注)其他字符保持不變。這意味著任何沒(méi)有被小寫(xiě)字母跟著的連字符也將保持不變。然后可以使用存儲(chǔ)在對(duì)象中按照駝峰命名法命名的名稱作為鍵來(lái)訪問(wèn)屬性,如element.dataset.keyname。訪問(wèn)屬性的另一種方法是使用括號(hào)符號(hào),如
element.dataset[keyname]??紤]以下的HTML代碼:<li
data-type="veg"
data-distance="2miles"
data-identifier="10318"
data-owner-name="someName">
Salad
King
</li>以下是幾個(gè)例子:var
restaurant
=
document.getElementById("restaurantId");var
ratings
=
restaurant.dataset.ratings;
restaurant.dataset.ratings
=
newRating;var
owner
=
restaurant.dataset['ownerName'];
restaurant.dataset['ownerName']
=
'newOwner';現(xiàn)在所有的主流瀏覽器都支持這種方法。相比之前訪問(wèn)自定義數(shù)據(jù)屬性的方法,你應(yīng)該更喜歡這種方法。使用jQuery你也可以使用jQuery的data()方法來(lái)訪問(wèn)元素的數(shù)據(jù)屬性。在jQuery1.6之前,你必須使用以下代碼來(lái)訪問(wèn)數(shù)據(jù)屬性:var
restaurant
=
$("#restaurantId");var
owner
=
restaurant.data("owner-name");
restaurant.data("owner-name",
"newName");從版本1.6開(kāi)始,jQuery使用駝峰命名法版本的數(shù)據(jù)屬性。現(xiàn)在,你可以使用以下代碼來(lái)做同樣的事情:var
restaurant
=
$("#restaurantId");var
owner
=
restaurant.data("ownerName");
restaurant.data("ownerName",
"newName");你應(yīng)該知道,jQuery內(nèi)部還試圖將從數(shù)據(jù)屬性中獲取的字符串轉(zhuǎn)換成合適
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年度能源項(xiàng)目贈(zèng)予、借款與設(shè)備租賃管理協(xié)議3篇
- 2024圖書(shū)編纂印刷國(guó)際版權(quán)合作與委托協(xié)議3篇
- 2024年度終止房屋買(mǎi)賣(mài)合同及處理交易糾紛協(xié)議3篇
- 2024年外債網(wǎng)絡(luò)安全借款合同范本3篇
- 2024年危險(xiǎn)物品銷(xiāo)售與售后服務(wù)承諾合同3篇
- 酒店與洗滌公司合同范例
- 異地超市供貨合同范例
- 工商執(zhí)照租合同范例
- 蔬菜交易制式合同范例
- 房屋供銷(xiāo)合同范例
- 小學(xué)六年級(jí)語(yǔ)文:《??嫉?0篇文言文》
- DB31∕T 1154-2019 手術(shù)室X射線影像診斷放射防護(hù)及檢測(cè)要求
- 花崗巖檢測(cè)報(bào)告-實(shí)用文檔
- 保育員(高級(jí))考試題庫(kù)附答案(600題)
- 全廣東江門(mén)市蓬江區(qū)2022年九年級(jí)數(shù)學(xué)上學(xué)期期末試題含答案
- 國(guó)家文化安全戰(zhàn)略研究論文
- 中國(guó)傳統(tǒng)文化英語(yǔ)(課堂PPT)
- 二十五項(xiàng)反措檢查表優(yōu)質(zhì)資料
- GS020汽車(chē)發(fā)動(dòng)機(jī)底蓋沖壓模具的設(shè)計(jì)與制造
- 《組織行為學(xué)》個(gè)案例及參考答案
- 山東省建筑消耗量定額
評(píng)論
0/150
提交評(píng)論