我需要枚举我之前修改过的 DOM 元素的所有属性。我可以用 Firefox、Chrome 和 Opera 做到这一点,但我不能用 Safari(我暂时不关心 IE)。
<a id="link">Link...</a>
<script>
var link = document.getElementById("link");
var foo = function (baz) {};
link.onclick = foo;
alert ("onclick" in link); // true
alert (link.hasOwnProperty("onclick")); // true
alert (link.propertyIsEnumerable("onclick"));
// false with Chrome, Safari, Opera*
</script>
*:虽然该属性在 Opera 中是不可枚举的,但无论如何它是可枚举的!!!
for (p in link)
if (p==="onclick")
alert (p); // onclick
我可以通过在分配之前删除属性在 Chrome中进行第三个alert
输出:true
onclick
delete link.onclick;
但该属性尚未在 Safari 中枚举。
我什至尝试使用 EcmaScript 5 Object 方法defineProperty:
Object.defineProperty (link, onclick, {
value: foo,
enumerable: true,
configurable: true,
writable: true
});
但它返回错误:
TypeError:DOM 对象不支持 defineProperty
有什么建议么?
PS 为什么 Safari 的行为与 Chrome 不同,尽管它们都是基于 Webkit 的?