Удаление атрибута в IE - в чем засада?
Почему в IE не работает код нижеприведённый?
В FF и Опере работает. Если поставить removeAttribute вместо delete - сработает, но мне хочется понять сам принцип. Библиотека кроссбраузерного events.js у меня на IE 6 некорректно снимает события из-за этого - там тоже удаление в remove через delete. <html> <head> </head> <body> <h1 id="TestStop">Link</h1> <script type="text/javascript"> var el = document.getElementById('TestStop') el.newF = 1 alert('1 - ' + el.newF) delete el.newF // el.removeAttribute('newF') alert('2 - ' + el.newF) </script> </body> </html> |
Атрибуты элементов и свойства объектов — разные вещи.
p.s. что с xpoint? такая полезная ссылка не доступна ((( |
я устанавливаю в коде не атрибут
[quote=Octane;32377]Атрибуты элементов и свойства объектов — разные вещи.
Но ведь я устанавливаю в коде не атрибут, а именно свойство: el.newF = 1 Атрибут я не устанавливаю! Да, синхронизацией браузера оно создаётся, но почему же IE не дает это установленное свойство удалить через delete ? Как мне снести его? Именно свойство? |
el.newF = undefined; |
а в синглтоне Event ?
Спасибо.
А в библиотечке http://javascript.ru/tutorial/events/crossbrowser - тут в ф-ии remove свойства элемента улаляются именно через delete. ....... for (var any in elem.events) return delete elem.handle delete elem.events } ...... Это разве корректно? Собственно,у меня именно здесь и начал ругаться IE - что вывело на эту ошибку. Т.е. давайте устаканим - всё же как наиболее кроссбраузерно удалить свойство? Я тестирую сайт свой под IE 6 и потому для меня этот вопрос важен. |
Хм… пробовал в IE8, там это видимо исправили, не понял сначала вопроса, в IE6 действительно ошибка.
Цитата:
document.body.x = 1; document.body.x = undefined; alert("x" in document.body); // true Так как в IE упрощены атрибуты и свойства DOM-элементов, то наверное так и придется через removeAttribute делать: document.body.x = 1; document.body.removeAttribute("x"); alert("x" in document.body); // false в IE хотя там с регистром еще заморочки… |
Цитата:
|
всё то же удаление
Re: Смотря какие цели удаления.
Цель - удалить-освободить "навешенные" на элемент свойства. Максимально возможно без утечек. В приведенной библиотеке events.js из-за этой ошибки в IE6 не выполняются у меня бизнес-логика. В принципе, присваивание свойству undefined - освободит связанные свойством ресурсы, а оставшееся свойство... ну пусть и висит - оно не мешает, это как бы пустая ссылка уже. Да, оно находится в списке свойств, но привязано к элементу, и утечки с ним уже не возможны - время жизни свойства определит сам элемент. Для events.js этот путь мне кажется достаточным. Для объектов или массивов delete в IE6 работает нормально. document.body.x = 1; document.body.removeAttribute("x"); alert("x" in document.body); // false в IE но этот же код true в FF ! |
В библиотеке проверка существования св-ва делается через
document.body.x = undefined; if(!document.body.x) alert('Свойства нет'); потому просто присвоение undefined кажется достаточным, хотя если есть путь, который кроссбраузерно и из списка свойств удалит, то, оно, конечно, кошерно было бы... :) |
Часовой пояс GMT +3, время: 21:36. |