簡體   English   中英

Javascript DOM:設置自定義DOM元素屬性

[英]Javascript DOM: Setting custom DOM element properties

是否可以在DOM元素上設置自定義屬性,並依賴它們持久化?

例如,給定

 <html><body><div id="foo"></div></body></html>

document.getElementById('foo').bar = "baz";是否公平document.getElementById('foo').bar = "baz"; ,並期望document.getElementsByTagName('div')[0].bar等於"baz"

請注意,我在這里談論的是屬性,就像普通的javascript對象屬性一樣,而不是元素屬性。

我對它是如何跨瀏覽器感興趣,以及它是否支持任何規范。

DOM API是否保證每次都會為同一個DOM元素返回相同的javascript對象?

作為一般規則,請勿使用自定義屬性。 您不應該以他們不期望的方式修改DOM對象,因為它們可能不會按照您的想法行事。

HTML5中自定義屬性的機制是使用數據前綴。

但是,HTML5並不是一個標准,並沒有廣泛實現。 但是如果你對數據屬性使用set / getAttribute ,它應該適用於所有相當現代的瀏覽器,並且將來不應該使用數據前綴引入標准屬性。

但話雖如此,我仍然建議使用自定義對象來存儲值,並通過元素id或其他標准(如HTML 4.01中)屬性值來引用它們。 它避免了自定義屬性和屬性的問題,並且已知可以在任何地方使用。

好吧,有dataset屬性:

div.dataset.bar = 'baz';

但它沒有在IE中實現。

現場演示: http //jsfiddle.net/simevidas/dJr2u/

沒有。

讓我們說5年前你認為屬性.contains是一個很好的用例,用於說明元素是否包含一些特殊數據。

所以你寫了document.getElementById("someId").contains = true

然后你有像if (document.getElementByID("someId").contains)

今天因為Node.prototype.contains是一個方法而中斷。

基本上你的代碼不是未來的安全。

這是規范對內部屬性訪問器的說法:

除非另有說明,否則Host對象可以以任何方式實現這些內部方法; 例如,一種可能性是特定主機對象的[[Get]]和[[Put]]確實獲取並存儲屬性值,但[[HasProperty]]始終生成false。

主機對象可以在[[Put]]操作上定義附加約束。 如果可能,在[[CanPut]]的此定義返回false的情況下,主機對象不應允許[[Put]]操作。

但是,我認為這只是理論上的,實際上expandos正如預期的那樣工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM