[Ликбез] |
Форма входа |
Меню сайта |
Categories | ||
|
Главная » Статьи » Web-программирование » Java Script |
Реализация атрибутов в Internet Explorer радикально отличается от той, которую предписывает стандарт DOM и которая реализована во всех остальных браузерах. Internet Explorer (здесь и далее, речь идёт о IE версии ниже 8) не различает атрибуты и свойства, что делает работу с атрибутами весьма затруднительной. Этот материал объясняет назначение атрибутов и свойств и представляет примеры их использования. Далее обсуждаются различия реализации в Internet Explorer, последствия этих различий и написание кроссбраузерных приложений. Возможно эта статья поможет кому-нибудь не наступить на грабли, о которые уже споткнулось множество программистов. Атрибуты и свойства в модели DOMДля каждого тега в XML и HTML может быть указано произвольное количество атрибутов. Code (HTML) <input id="textField" type="text" value="5" /> Здесь у тега input три атрибута: id, type и value со значениями textField, text и 5 соответственно. DOM позволяет читать атрибуты из скриптов с помощью методов hasAttribute() и getAttribute(): Code (HTML) <input id="textField" type="text" value="5" /> Можно и менять атрибуты, для этого существуют методы setAttribute() и removeAttribute(): Code (HTML) <input id="textField" type="text" value="5" /> В наших примерах мы работает с объектом inputTag, который соответствует тегу input документа. Code (HTML) <input id="textField" type="text" value="5" /> Если судить по этому примеру, то атрибут type и свойство type ничем не отличаются. Code (HTML) <input id="textField" type="text" value="5" /> Можно изменить и свойство, атрибут тоже автоматически изменится. Это связано с тем, что браузер автоматически синхронизирует значения атрибутов и свойств. Code (HTML) <input id="textField" type="text" value="5" /> Это хорошо показывает разницу атрибута и свойства: атрибут может быть любой строкой, он лишь показывает, что написано в исходном коде документа. Свойства же отображают текущее состояние тега, они не могут содержать недопустимых значений. Еще более явной становится разница, если посмотреть на атрибут value и свойство value. Code (HTML) <input id="textField" type="text" value="5" /> Здесь атрибут и свойство имеют разные значения: атрибут value определяет начальное значение для текстового поля. Текущее же значение хранится в свойстве value и меняется через него же. Не всегда у атрибута и связанного с ним по смыслу свойства одинаковые названия. Типичным исключением является атрибут class, которому соответствует свойство className. Часто отличается и тип данных, к примеру значение атрибута onclick (как и в принципе всех атрибутов) строкового типа, а у соответствующего свойства onclick значением является функция.- Реализация атрибутов в Internet ExplorerРазработчики IE упростили модель DOM до предела уравняв атрибуты и свойства. Code (HTML) <input id="textField" type="text" value="5" /> При таком подходе немедленно возникает множество осложнений. Code (HTML) <input id="textField" type="text" value="5" /> Эти строки устанавливают два разных свойства объекта. ›› inputTag.getAttribute("ABRAKADABRA") (проверить) Следующее осложнение возникает с атрибутами, название которых не идентично названию свойства: Code (HTML) <input id="textField" type="text" value="5" /> ›› inputTag.setAttribute("class", "my-class") (проверить) Эта строчка корректно изменит класс тега во всех браузерах. Лишь в Internet Explorer она установит свойство class, не имеющее никакого значение - нужное свойство называется className. Иначе говоря, для изменения класса проще изменить свойство className, это работает одинаково надежно во всех браузерах. Но на этом проблемы не кончаются. Code (HTML) <input id="textField" type="text" value="5" /> После выполнения этого кода в Internet Explorer щелчки на текстовом поле не вызовут никакой реакции. Причина станет ясна, если сравнить значения свойства onclick в Internet Explorer и каком-нибудь другом браузере: Code (HTML) <input id="textField" type="text" value="5" /> ›› alert(typeof inputTag.onclick) (проверить) Это покажет, что Internet Explorer записал в свойство onclick строку, в то время как другие браузеры корректно преобразовали значение атрибута в функцию. Code (HTML) <input id="textField" type="text" value="5" /> Стандарт DOM, однако, явно предписывает, что второй параметр метода setAttribute() является строкой. ВыводыПроще всего, конечно, вообще отказаться от использования атрибутов и пользоватьсятолько свойствами. Для большинства приложений этого достаточно, но существуют задачи, где без атрибутов не обойтись (к примеру копирование DOM-дерева с параллельным его изменением). Code (JavaScript) document.body.setAttribute("class", "attribute-test"); Источник: Xpoint.ru Источник: Атрибуты и свойства,реализация, методы,отличия,Internet Explorer, модель, DOM, JavaScript | |
Всего комментариев: 0 | |