1

我需要枚举我之前修改过的 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输出:trueonclick

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 的?

4

1 回答 1

0

useragent与在Webkit JavaScriptCore中实现 EcmaScript5 Object 方法的 Webkit 版本进行比较。Chrome 的 Webkit 版本与 Safari 不同,因此标准支持也会有所不同。

于 2012-08-29T17:49:43.707 回答