Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.10.2009, 00:39
гвоздик
 
Сообщений: n/a

Удаление атрибута в 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>
Ответить с цитированием
  #2 (permalink)  
Старый 14.10.2009, 00:54
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Атрибуты элементов и свойства объектов — разные вещи.


p.s. что с xpoint? такая полезная ссылка не доступна (((
Ответить с цитированием
  #3 (permalink)  
Старый 14.10.2009, 08:50
гвоздик
 
Сообщений: n/a

я устанавливаю в коде не атрибут
[quote=Octane;32377]Атрибуты элементов и свойства объектов — разные вещи.

Но ведь я устанавливаю в коде не атрибут, а именно свойство:
el.newF = 1

Атрибут я не устанавливаю! Да, синхронизацией браузера оно создаётся, но почему же IE не дает это установленное свойство удалить через delete ?

Как мне снести его? Именно свойство?
Ответить с цитированием
  #4 (permalink)  
Старый 14.10.2009, 09:17
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

el.newF = undefined;
Ответить с цитированием
  #5 (permalink)  
Старый 14.10.2009, 09:59
гвоздик
 
Сообщений: n/a

а в синглтоне 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 и потому для меня этот вопрос важен.
Ответить с цитированием
  #6 (permalink)  
Старый 14.10.2009, 12:27
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Хм… пробовал в IE8, там это видимо исправили, не понял сначала вопроса, в IE6 действительно ошибка.
Сообщение от Kolyaj
el.newF = undefined;
Это не спасает от:
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

хотя там с регистром еще заморочки…

Последний раз редактировалось Octane, 14.10.2009 в 12:34.
Ответить с цитированием
  #7 (permalink)  
Старый 14.10.2009, 12:36
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Octane
Это не спасает от:
Смотря какие цели удаления.
Ответить с цитированием
  #8 (permalink)  
Старый 14.10.2009, 12:57
гвоздик
 
Сообщений: n/a

всё то же удаление
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 !
Ответить с цитированием
  #9 (permalink)  
Старый 14.10.2009, 13:23
гвоздик
 
Сообщений: n/a

В библиотеке проверка существования св-ва делается через
document.body.x = undefined;
if(!document.body.x) alert('Свойства нет');

потому просто присвоение undefined кажется достаточным, хотя если есть путь, который кроссбраузерно и из списка свойств удалит, то, оно, конечно, кошерно было бы...
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое удаление строк таблицы Tankist Events/DOM/Window 16 03.07.2013 16:42
Кроссброузерно определить значение атрибута faunder Общие вопросы Javascript 5 21.02.2009 22:08
в теге input изменение атрибута type gabber Internet Explorer 6 11.11.2008 13:01