目前,从 document.createElement() 返回的元素似乎没有任何 .dataset 属性,这是出乎意料的(https://html.spec.whatwg.org/#dom-dataset)。
请参阅#963 中的讨论; 在 V8 支持代理之前这是不可能的(不是非标准的Proxy.create
,而是new Proxy
)。
+1 真的需要这个功能
非常惊讶这还没有在规范中实现。
对于那些想要这个的人,请使用 _element_.setAttribute("data-foo","bar");
对此有何更新?
男孩,我刚刚花了一个小时调试这个问题的鬼魂,其唯一的症状是该节点内存不足。 原来是由使用dataset
而不是getAttribute
引起的。 也许在此期间的帮助警告可以使人们免于相同的经历? :-/
@domenic据此,从节点 6 开始支持Proxy
。
您是否有一些关于如何实现这一点的指导方针,以便更容易做出贡献?
@idanen您将需要首先实现DOMStringMap
接口,类型为<a i="8">HTMLElement</a>.prototype.dataset
。 实现DOMStringMap
将需要更改webidl2js
以通过代理支持遗留平台对象(如Web IDL中定义)。 Web IDL 规范包含关于每个内部方法应该做什么的详细说明。 (基本上,Web IDL 规范中的内容属于 webidl2js,HTML 标准中的内容属于 jsdom。)
如果您要为此工作,我还建议您将您的工作基于我的分支,该分支有望很快被合并。
@TimothyGu类似dom-token-list 的东西?
@idanen ,不,那是完全不同的东西。
我们在将测试套件迁移到 jsdom 时遇到了这个问题。 如果有帮助,这是我编写的代码模块,用于将dataset
getter 和 setter 转换为使用getAttribute
和setAttribute
: https ://gist.github.com/schreifels/
最有用的评论
+1 真的需要这个功能