好的,我可以制作一系列元素并对其进行测试,但这不是很实用。
我想知道是否有办法做某事:
如果(el接受attrName)做某事。
编辑:我引用此列表https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes
答案 0 :(得分:3)
浏览器不提供API来告诉您识别哪些属性。
如果要将您的要求限制为HTML 3.2,HTML 4或XHTML 1,那么您可以解析DTD以获取每个元素的受支持属性列表。例如the HTML 4.01 Strict DTD。这将要求您找到或编写JavaScript DTD解析器。
HTML 5不提供官方机器可读规范。您可以尝试解析索引中的the table of data(我注意到HTML 5和HTML 5.1之间的格式已经改变)
当然,对于HTML 5,您还必须处理多规格问题。 W3C发布了你可以使用的快照,它们是稳定的,但是WHATWG spec是“活着的”所以会不断变化。
Validator.nu是开源的,所以你可以use their schema,但它遵循生活规范,并且可能会发生变化并且经常过时。
这只涉及标准。如果你想处理实际支持的浏览器(考虑到它们有时会引入非标准功能,并且通常没有任何给定规范的完整实现),那么你大部分都不走运。您可能会在阅读HTML 5 test和Can I use等网站的数据方面取得一些成功。
如果你想处理浏览器不支持的东西(即它们允许你添加到DOM中的哪些属性,然后忽略任何不是你编写的代码的东西),那么,我知道,一切都被“接受”了。
答案 1 :(得分:0)
html属性的解释是特定于浏览器的。可以实现<div>
接受foo
作为属性的浏览器。因此,如果您尝试测试,<div>
“是否接受”foo
作为属性,结果将取决于浏览器。
简单地说:你不能。
答案 2 :(得分:-1)
您可以使用in
运算符测试元素类型是否具有属性属性。
var name = 'src';
var type = 'script';
if (name in document.createElement(type)) {
console.log(type, 'has the attribute \'' + name + '\'');
} else {
console.log(type, 'does not have the attribute \'' + name + '\'');
}
请注意,这将测试对象(本例中的HTML元素)是否定义了属性,而不是对象可能表示的元素的有效HTML属性,对象上定义的任何属性都将返回true。
这意味着它有一些注意事项,例如class
属性没有1:1映射,而是通过两个属性classList
提供和className
。