JavaScript進階(二十五):獲取所有標籤屬性,dataset 屬性

上篇博客我們說了 getAttribute 和 setAttribute,它們可以幫助我們去讀取自定義屬性,和設置自定義屬性,而且讓這個HTML標籤上面真的有這個屬性。

那麼接下來,我們除了這個以外,還會有一個小小的操作,就是說,我們經常有可能還需要去獲取這個標籤上,所有的屬性。

 

首先肯定一點,比如說,我們在 div 上面加了一個 title 和 onclick:

然後這裏給大家介紹一個新東西,叫做 attributes,注意,有 s 的。

那麼現在你就可以看到,這個 attributes,它是一個類數組,當然,它管自己叫做 NamedNodeMap,這個無所謂。

而且,你還可以看到,它其實是有兩份的,什麼意思呢?

下標一份,比如 0、1、2。

鍵值對一份,對應屬性名的 key 值,比如 id、onclick、title。

所以你既可以把它當數組用,也可以把它當 json 用,還是很方便的。

 

所以這個 attributes,它裏面會保存所有的屬性。

而且最棒的一點就是,它不光有系統屬性,還有你自己定義的屬性。

比如說,我們加個 :value="aaa"

那麼你可以看到,這時候就有一個 :value 了。

所以這種自定義屬性,它也是可以給我們的。

 

當然,我們現在用這個 attributes 的時候,你可以特別簡單的,直接對它進行任何你想要的操作。

因爲上面說了,這個 attributes 它是一個比較混合的一個狀態,它既有 0、1、2 的下標,然後也有 id、title 之類的 key 值。

所以你既可以用普通的 for 循環,也可以直接用 for in 循環當 json 使,都可以。

 

那麼現在這個時候,我們就來做個簡單的循環看看:

那麼我 attributes 這裏面一個又一個的 attr 是什麼?

它並不是一個直接的東西,而是一個對象,並且它裏面有 2 個屬性,一個叫 name,一個叫 value

你可以看到,它就是這樣的。

name 就是屬性的名字,value 就是這個屬性的值,並且它們都是字符串。

所以有了這個東西在,我們就可以很輕鬆的去遍歷我們所需要的東西,它上面都有什麼,這個對我們來說,是非常重要的。

 

然後接下來,我們還有一個小東西要說。

就是你平常,如果往 HTML 元素上,去塞一些別人沒見過的東西,雖然說是可以處理的了,但並不是唯一的選擇。

其實理論上來說,官方是給了我們一種自定義屬性的方式,這個大家應該也見過,就是所謂的 dataset 屬性,也就是 data-* 。

這個是在 HTML5 標準裏面所添加的一種新的方式,叫做 data-xxx,這個橫線後面叫什麼,你隨便,比如:

這個 dataset 屬性,它的一個好處就是可以直接的遍歷,非常的方便。

比方說,我們先把這個 dataset 給打印出來:

這個 dataset 屬性,其實就是一個所謂的數據集合,其實對應的就是 data-* 這些東西。

對於我們現在這個例子來說,它裏面有 2 個東西。

你可以看到,一個 aaa,一個 user。

 

當然有人說,那好 data- 怎麼沒了?

其實 data- 只是個標誌,人家給你東西的時候,當然就不會把這個一起給你。

 

另外,這裏面還有一種相對有點特殊的東西,比方說,我這裏面有多個橫線 data-user-id,這種也是很常見的:

那麼在這種情況下,你可以明確的看到,它會自動的,幫你變成小駝峯命名。

 

所以這個 dataset 沒什麼,就是它有這麼幾個特點:

第一個特點,就是它是受官方認可的一個東西。

這個大家可能會奇怪,官方認可是什麼意思啊?

我就這麼說,如果你胡亂的去添加屬性,其實是有一點風險的。

比方說,我自己創建了一個屬性叫 bind:

我就問你一個事,現在是 HTML5,將來 6,7,8 裏面,有沒有可能某一天,突然這個 bind 被官方拿去用了?

是有可能的,因爲這個標準一直在不斷的更新,鬼知道哪天會出現什麼屬性。

所以這時候,你這個代碼,可能到了某一個版本,就需要修改,你就不能叫 bind了,你得叫別的,這個是不是就有點風險啊?不大,但是有。

而 data- 開頭的,人家官方明確說了,沒問題,只要 W3C 還在,就不會有人拿這個開頭做屬性。

所以,它的第一個特點就是,受官方保護,在未來的 HTML 的版本當中,不會有衝突的可能。

 

然後第二個特點,就是可以直接的去遍歷。

因爲我們最開始說的 attributes,它是什麼東西都混一塊,系統的,自定義的,都在裏面。

而 dataset 呢,是把你自己的這些東西,歸到一個獨立的空間裏面,這樣的話,是不是就要方便一些。

 

反正大家知道,有 dataset 這麼個東西,就完了。

但是說句特別實在的話,這個 dataset 的用途其實挺有限的。

平常我們一般不會那麼豐富的去用它,但是畢竟有這麼個東西,我們知道就行。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章