Preamble
问题是关于使用 HTML 创建 HTML 元素data
属性,比如<object data="foo"></object>
.
问题
几分钟前我偶然发现了这个问题,这是一个快速问题;如果我写
$('<div>', { id:"foo", 'class':"bar" });
// <div id="foo" class="bar"></div>
However
$('<object>', { id:"foo", data:"some+data+string" });
// [ <object id="foo"></object> ]
我期望输出是
// [ <object id="foo" data="some+data+string"></object> ]
我知道关于.data
。我的问题是
$('<object>', { id:"foo", data:"some+data+string" }).data();
// Object {}
$('<object>', { id:"foo", 'data-foo':"some+data+string" }).data();
// Object {foo:"some+data+string"}
那么...为什么它不创建 HTML 属性data
因为它不是一个data-xxxx
属性名称,因此不会创建任何实际数据?
Update
我将再次重申这个问题中所写的内容。
[...]如果我写
$('<div>', { id:"foo", 'class':"bar" });
// <div id="foo" class="bar"></div>
However
$('<object>', { id:"foo", data:"some+data+string" });
// [ <object id="foo"></object> ]
我期望输出是
// [ <object id="foo" data="some+data+string"></object> ]
...我再一次知道.data
.
为什么不$('<div>', { data: 'foo' })
create <div data="foo"></div>
,或者换句话说,为什么它在创建元素时完全忽略该属性?
Edit
对于所有争论的人data
不是一个有效的 HTML 属性,好吧,it is http://www.w3.org/TR/html4/struct/objects.html#adef-data.
Update
截至今天,我针对此用例使用的解决方案是
$('<div>', {
attr: {
data: 'foo'
}
});