2013-05-08 43 views
2
el2.dataset.stuff = document.getElementById('el1'); 

似乎不起作用。數據集屬性不適用於對象?

我需要能夠稍後訪問el1的innerHTML屬性。

el2.dataset.stuff = document.getElementById('el1').innerHTML; 

有效,但我不喜歡將重複內容存儲在變量中的想法。如果我有很多元素,它會吃掉很多的記憶。

我想因爲數據集需要字符串?如果這是真的,我該如何設置el2中另一個elmement的引用?

+0

您可以放置​​要存儲的元素的ID。 – 2013-05-08 13:36:10

+0

在我的代碼中,我沒有真正的ID。這只是一個例子..我確實有元素的索引,儘管.. – 2013-05-08 13:36:57

+0

它可以在你可以序列化和反序列化它們(像'JSON.stringify'和'JSON.parse')的意義上使用對象,但對於DOM元素來說這是不可能的,所以不行,你不能存儲它們。 – Ian 2013-05-08 13:39:10

回答

3

其實你只是可以按照定義在dataset屬性中存儲字符串。

所以你的情況不是你應該有一個單獨的數據結構(這應該是在這兩者缺一範圍訪問)來存儲您參考如下:

var myPointers = { 
    'el2': { 
    'stuff': document.getElementById('el1') 
    } 
}; 

// later 

var el1 = myPointers.el2.stuff; 

,或者你只是存儲el1 id和在需要時檢索實際元素:

el2.dataset.stuff = 'el1'; 

// later 

var el1 = document.getElementById(el2.dataset.stuff); 
+1

謝謝,但我將它作爲el2的屬性添加,如el2.stuff = document.getElementById('el1')。似乎工作:D – 2013-05-08 13:55:10

+0

@AnnaK。有了你的解決方案,你可以將某些東西附加到DOM對象上,而'dataset'另外還會添加一些東西給實際的HTML元素。只要你的標識符'stuff'沒有被某些其他功能使用,你就會好起來的。但是,如果某個插件或瀏覽器使用該術語,則會遇到問題。 – Sirko 2013-05-08 13:59:46

+0

看起來這可能對構建Web組件有用。 – 2017-10-08 06:38:51