Удаление атрибута в 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, время: 18:05. |