我需要 JavaScript 代码来遍历 HTML 元素中的填充属性。
这个Element.attributes ref 说我可以通过索引访问它,但没有说明它是否得到很好的支持和可以使用(跨浏览器)。
还是有其他方式?(不使用任何框架,如 jQuery / Prototype)
我需要 JavaScript 代码来遍历 HTML 元素中的填充属性。
这个Element.attributes ref 说我可以通过索引访问它,但没有说明它是否得到很好的支持和可以使用(跨浏览器)。
还是有其他方式?(不使用任何框架,如 jQuery / Prototype)
这适用于 IE、Firefox 和 Chrome(有人可以测试其他的吗?-谢谢,@Bryan):
for (var i = 0; i < elem.attributes.length; i++) {
var attrib = elem.attributes[i];
console.log(attrib.name + " = " + attrib.value);
}
编辑:IE 迭代有问题的 DOM 对象支持的所有属性,无论它们是否实际上已在 HTML 中定义。
您必须查看attrib.specifiedBoolean 属性以确定该属性是否确实存在。Firefox 和 Chrome 似乎也支持这个属性:
for (var i = 0; i < elem.attributes.length; i++) {
var attrib = elem.attributes[i];
if (attrib.specified) {
console.log(attrib.name + " = " + attrib.value);
}
}
另一种方法是使用Array.from以下方法将属性集合转换为数组:
Array.from(element.attributes).forEach(attr => {
console.log(`${attr.nodeName}=${attr.nodeValue}`);
})
如果有人对过滤版本感兴趣,或者正在尝试构建 CSS 属性选择器,请访问:
let el = document.body;
Array.from(el.attributes)
.filter(a => { return a.specified && a.nodeName !== 'class'; })
.map(a => { return '[' + a.nodeName + '=' + a.textContent + ']'; })
.join('');
//outputs: "[name=value][name=value]
您当然可以删除连接以检索数组或为“样式”添加过滤器,因为在大多数 Web 应用程序中,样式标记被小部件广泛操纵。
更高效
Array.prototype.forEach.call(elm.attributes, attr => console.log(attr))
最简单的方法是使用扩展运算符。
const el = document.querySelector('div');
[...el.attributes].forEach((attr) => {
console.log(attr.name + ' = ' + attr.value);
});
<div class="foo" id="bar"></div>