Мне нужно перечислить все свойства моих элементов 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
Я могу сделать третий alert
вывод true
в Chrome с помощьюудаление свойства onclick
перед его назначением:
delete link.onclick;
Но свойство еще не перечислено в Safari.
Я даже пытался использовать метод EcmaScript 5 Object defineProperty :
Object.defineProperty (link, onclick, {
value: foo,
enumerable: true,
configurable: true,
writable: true
});
, но он возвращает ошибку:
TypeError: definePropertyне поддерживается в объектах DOM
Есть предложения?
PS Почему Safari отличается от Chrome, хотя оба они основаны на Webkit?