有没有办法测试html元素是否可以接受属性?

时间:2016-11-04 10:36:25

标签: javascript html5

好的,我可以制作一系列元素并对其进行测试,但这不是很实用。

我想知道是否有办法做某事:

如果(el接受attrName)做某事。

编辑:我引用此列表https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes

3 个答案:

答案 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 testCan 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