1
我需要枚舉我之前修改的DOM元素的所有屬性。我可以使用Firefox,Chrome和Opera來完成,但我無法使用Safari(我暫時不在乎IE)。如何使一個DOM處理程序在Safari中枚舉?
<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
我可以通過分配之前刪除onclick
屬性使Chrome的第三alert
輸出true
:
delete link.onclick;
但物業Safari中並沒有列舉尚。
我甚至與ECMAScript 5對象方法defineProperty嘗試:
Object.defineProperty (link, onclick, {
value: foo,
enumerable: true,
configurable: true,
writable: true
});
但它返回的錯誤:
TypeError: defineProperty is not supported on DOM Objects
有什麼建議?
P.S.爲什麼Safari的行爲與Chrome不同,儘管它們都基於Webkit?
回答你的PS:Webkit是渲染引擎。對於Javascript,Safari使用JavaScriptCore引擎(Squirrelfish),Chrome使用V8。 – Martijn 2011-03-24 12:30:34