并非所有浏览器都支持所有元素上的所有属性。HTML5 中有许多新属性,因此测试您所处的浏览器环境变得越来越重要。
function elementSupportsAttribute(element, attribute) {
var test = document.createElement(element);
if (attribute in test) {
return true;
} else {
return false;
}
};
用法
if (elementSupportsAttribute("textarea", "placeholder") {
} else {
// fallback
}
“(” –> “)”
if (elementSupportsAttribute("textarea", "placeholder")) {
} else {
// 回退
}
这似乎不起作用。我使用了您的函数,并在 FireFox 9.0.1 中将其参数设置为“text”和“value”,它返回了“false”。我喜欢这个代码片段的简洁和优雅,但我就是无法使其工作。有人知道发生了什么事吗?
@Michael
没有“text”元素,但有类型为“text”的“input”元素。此代码片段测试元素中的属性,而不是测试元素中属性与其他属性的组合。
我尝试了另一个测试用例,它似乎不起作用
element = “form”
attribute = “novalidate”
结果:false
浏览器:OSX 上的 Chrome 23
不起作用。如果 IE 发现属性已设置,它将返回 true,即使它实际上不受支持。使用 textarea 和 maxlength 属性进行了测试。
忽略我的上一条评论。必须传入 'maxLength' 而不是 'maxlength',它才按预期工作。
我必须在它工作之前将“.style”附加到创建的元素上(Chrome 26,OSX)。
function elementSupportsAttribute(element, attribute) {
var test = document.createElement(element).style;
if (attribute in test) {
return true;
} else {
return false;
}
};
我还调整了上面的代码以接收多个属性名称,用“|”分隔
function elementSupportsAttribute(element, attribute) {
var result = false;
var test = document.createElement(element).style;
var attributes = attribute.split(“|”);
var numAttributes = attributes.length;
for (var i = 0; i < numAttributes; ++i) {
if (attributes[i] in test) {
result = true;
break;
}
}
return result;
}
该函数可以简化为如下所示
!!
(非非)有效地将真值合并为真正的布尔值。@Benjamin 原代码检查的是 <element> 属性。
您的更改允许代码检查 CSS 样式。您应该将其重命名为类似于
elementSupportsStyle
的名称。文章的标题具有误导性,文章本身也没有澄清:脚本实际上测试的是元素的 DOM 属性,而不是属性。提示是 Cory 的评论:https://css-tricks.cn/snippets/javascript/test-if-element-supports-attribute/#comment-256993
像“value”、“maxlength”等内容都有 DOM 属性等价物,但它们通常采用驼峰命名法(因此 'maxlength' 为 false,而 'maxLength' 为 true)。确保您使用的是 DOM 属性名称和大小写,而不一定是全小写的属性大小写。
当 DOM 注册元素时,属性用于设置属性,并且仅在 element.attributes 数组中存在,如果它们直接写入元素的标签中(element.setAttribute() 也可以实现这一点)。除非您使用的是 IE7 并且您做错了事情。
您应该在运行测试后删除该元素。现在,您正在污染您的 DOM。
对于属性来说,它工作得很好,如果您想测试样式,则可以根据需要进一步增强它,或者创建不同的函数,或者使用 Modernizr 等等。修改了上面的函数并添加了一些参数检查以提高开发友好性 :)
function elementSupportsAttribute(element, attribute) {
if (!element || !attribute) throw Error(‘传递参数错误’);
var test = document.createElement(element);
return attribute in test;
}
正如阅读此线程的任何人都可能已经了解到的那样,不存在针对属性检查元素的简单解决方案。
但是,我花费了相当多的时间来编译 此程序,该程序还记录了在元素中找到的已弃用、过时、特定于供应商、非标准和其他属性。
我希望那里有人发现它有用 :-)
Puddingsan