Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Любое свойство DOM-узла == его атрибут (https://javascript.ru/forum/css-html-internet-explorer/4944-lyuboe-svojjstvo-dom-uzla-%3D%3D-ego-atribut.html)

B~Vladi 01.09.2009 12:44

Любое свойство DOM-узла == его атрибут
 
Возможно многие это знают уже давно, но вот я заметил это относительно недавно.

Не для кого не секрет, что любому DOM-узлу мозно прикрутить любое пользовательское свойство:
var ele=document.getElementById('id');
ele.userProperty=true;

И это иногда бывает действительно удобно, особенно в обработчиках событий. Но, если браузеры Mozilla, Opera ect. "знают" какие свойства-атрибуты есть у узлов, то IE прикручивает такие вещи непосредственно как аттрибут. Это можно посмотреть в IE8->средства разработчика и в IETester->дебаггер причём для всех версий. Возможно, это как-то связано с особенностью DOM-модели IE...
Сначала меня это сильно смутило - а не возникнут ли какие-либо конфликты с этим, не считая того, что код уже невалиден. И вообще - это нормальный приём - использовать DOM для хранения чего-либо своего.
Вот собственно в этом и вопрос. Ваши мнения?!

B~Vladi 01.09.2009 12:47

Ещё хотел бы добавить:
Пути решения я смогу найти всегда - меня интересует именно этот подход.

Kolyaj 01.09.2009 12:49

Скорее наоборот: атрибуты приравнены к свойствам.

Цитата:

Сообщение от B~Vladi
не считая того, что код уже невалиден

А как то, что присваивается в JavaScript, связано с валидацией?

http://xpoint.ru/know-how/JavaScript/Atributyi?8 зубрить.

Riim 01.09.2009 12:56

Цитата:

Сообщение от B~Vladi
это нормальный приём - использовать DOM для хранения чего-либо своего

Очень часто это сильно облегчает жизнь, главное не напороться на что-то занятое.

B~Vladi 01.09.2009 12:59

Цитата:

Сообщение от Kolyaj
А как то, что присваивается в JavaScript, связано с валидацией?

Получается примерно так:
<div userData=true action="function(){}"></div>

И это не есть валидно.
Цитата:

Сообщение от Riim
Очень часто это сильно облегчает жизнь

Да, я про это упоминал и полностью согласен.
Цитата:

Сообщение от Riim
главное не напороться на что-то занятое.

Вот я и пытаюсь выяснить - на что же можно напороться?!

B~Vladi 01.09.2009 13:03

Цитата:

Сообщение от Kolyaj
http://xpoint.ru/know-how/JavaScript/Atributyi?8 зубрить.

Цитата:

Internet Explorer 7.0, который должен скоро выйти, вряд ли улучшит ситуацию, серьезных улучшений движка до версии 8.0 точно не будет (да и там это еще очень сомнительно)
Как видно - ничего не поменялось:(

Kolyaj 01.09.2009 13:09

Цитата:

Сообщение от B~Vladi
Получается примерно так:

Где получается? HTML-код страницы не меняется. А то что выдает innerHTML в любом случае валидацию не пройдет, тем более иешный.

B~Vladi 01.09.2009 13:24

Цитата:

Сообщение от Kolyaj
Где получается?

Цитата:

Сообщение от B~Vladi
Это можно посмотреть в IE8->средства разработчика и в IETester->дебаггер причём для всех версий.

Цитата:

Сообщение от Kolyaj
HTML-код страницы не меняется.

Дк в том-то и дело, что меняется!!!

B~Vladi 01.09.2009 13:25

Цитата:

Сообщение от Kolyaj
А то что выдает innerHTML в любом случае валидацию не пройдет, тем более иешный.

Не факт.

Kolyaj 01.09.2009 13:29

Цитата:

Сообщение от B~Vladi
Дк в том-то и дело, что меняется!!!

Меняется innerHTML.

Цитата:

Сообщение от B~Vladi
Не факт.

Интересное заявление. И на чем оно основано?

B~Vladi 01.09.2009 13:35

Цитата:

Сообщение от Kolyaj
Меняется innerHTML.

Меняется сгенерированный HTML-код, т.е. то, с чем работает IE в данный момент, а что там innerHTML выводит - неважно.
Цитата:

Сообщение от Kolyaj
Интересное заявление. И на чем оно основано?

innerHTML может и преобразует сам там чего-то (регистр тегов, например), я же говорю про тот код, который в памяти лежит - например тот, который отсылает опера на w3c.

Kolyaj 01.09.2009 14:23

Цитата:

Сообщение от B~Vladi
Меняется сгенерированный HTML-код

Это и есть innerHTML.

Цитата:

Сообщение от B~Vladi
например тот, который отсылает опера на w3c.

Во-первых, она отправляет исходный код. Во-вторых, при чем здесь опера, если речь обо всех браузерах, а в каждом браузере генерируется разный код из одного и того же исходного.

Riim 01.09.2009 14:32

html при парсинге преобразуется в javascript-объекты (ну, не совсем javascript) и html-валидация к ним никакого отношения уже не имеет. Думать о валидации нужно до парсинга, для того она и придумана, что бы этот парсинг прошел удачно (если валидатор все понял, то и парсер браузера поймет).

B~Vladi 01.09.2009 14:44

Цитата:

Сообщение от Kolyaj
Во-первых, она отправляет исходный код.

Не исходный, а сгененированный.
Цитата:

Сообщение от Kolyaj
Во-вторых, при чем здесь опера

Суть та же.
Цитата:

Сообщение от Riim
html-валидация к ним никакого отношения уже не имеет

А может имеет. Всовывая innerHTML парсер ведь обрабатывает его так же как и исходный.

Kolyaj 01.09.2009 15:16

Цитата:

Сообщение от B~Vladi
Всовывая innerHTML парсер ведь обрабатывает его так же как и исходный.

Парсер и валидатор это вообще разные вещи. Валидатор -- это писькомерка такая у вебмастеров, имеющий лишь косвенное отношение к реальности. Другими словами, валидатор нам как бы говорит, что якобы возможно если всем повезет и все будут себя хорошо вести, то эта страница будет нормально отображаться в следующих версиях браузеров. А и ИЕ8 как плевал на стандарты, так и плюет.

Цитата:

Сообщение от B~Vladi
Суть та же.

Не та же. Мы о ИЕ говорим.

B~Vladi 01.09.2009 15:21

Цитата:

Сообщение от Kolyaj
Парсер и валидатор это вообще разные вещи.

Спасибо, напомнил:)
Цитата:

Сообщение от Kolyaj
А и ИЕ8 как плевал на стандарты, так и плюет.

Вот тут неправда:)

Меня волнует валидность, ок?:)
Я просто пытаюсь понять - какая палка тут может вылезти. Мне не нравится, что в HTML (innerHTML) появляются левые атрибуты и ещё левее их свойства в ИЕ.
Вас это не беспокоит?! Или вы не знали?!

Kolyaj 01.09.2009 15:31

Цитата:

Сообщение от B~Vladi
Меня волнует валидность, ок?

Да пожалуйста. Я атеист, но нормально отношусь к религиозным людям :) Но при чем здесь JavaScript?

Цитата:

Сообщение от B~Vladi
Я просто пытаюсь понять - какая палка тут может вылезти.

Палка может вылезти с другой стороны, которую ты упорно игнорируешь. Ссылку на xpoint вызубрил? Еще на javascript.ru где-то была статья от Ильи, но она местами некорректна.

Цитата:

Сообщение от B~Vladi
Мне не нравится, что в HTML (innerHTML) появляются левые атрибуты и ещё левее их свойства в ИЕ.

Еще в innerHTML кавычки пропадают, и слеши завершающие у одиночных тегов. Это не смущает?

Цитата:

Сообщение от B~Vladi
Вас это не беспокоит?

Не более, чем куча других фичей/багов браузеров.

Я сейчас не могу вспомнить конкретных случаев из практики, где я натыкался на эту особенность, но они были и не раз. И если бы я не знал об этой особенности ИЕ, баг бы искал долго и упорно.

B~Vladi 01.09.2009 15:40

Цитата:

Сообщение от Kolyaj
Я атеист, но нормально отношусь к религиозным людям Но при чем здесь JavaScript?

:D а причём тут религия?
А JS тут как раз и причём. Это же результат его работы в ИЕ:)
Цитата:

Сообщение от Kolyaj
Ссылку на xpoint вызубрил?

Так точно!
Цитата:

Сообщение от Kolyaj
Это не смущает?

Смущает, но в дебагере этого нет!!!

Мы можем сделать вывод?! Не стоит на это обращать внимание, или лучше не хранить что-то в DOM?!

Kolyaj 01.09.2009 15:50

Цитата:

Сообщение от B~Vladi
Мы можем сделать вывод?! Не стоит на это обращать внимание, или лучше не хранить что-то в DOM?!

Обращать на это внимание нужно, но в другом аспекте. Например, не пользоваться без сильной надобности методами setAttribute/getAttribute.

Riim 01.09.2009 15:51

Наверно речь о том что если записать в свойство объект, то при:
var d = el.innerHTML;
el.innerHTML = d + 'text';


вместо объекта получится что-то неизвестное, ведь в "d" может быть только строковое (неполноценное) представление объекта.

B~Vladi 01.09.2009 15:53

Цитата:

Сообщение от Kolyaj
Например, не пользоваться без сильной надобности методами setAttribute/getAttribute.

Да я ими собственно и не пользуюсь никогда. Но мне всё же не нравицо. Ладно, буду сохранять всё в норм объектах, только чтобы не видеть этот ужас в дебагере:write:

Kolyaj 01.09.2009 15:54

Riim,
Цитата:

Сообщение от Kolyaj
атрибуты приравнены к свойствам.

а не наоборот. Т.е. хранится там может что угодно, и это что угодно будет возвращаться при getAttribute, а должна строка.

B~Vladi 01.09.2009 15:55

Цитата:

Сообщение от Riim
Наверно речь о том

Дк что никто не понял о чём шла речь?!

Цитата:

Сообщение от Kolyaj
Т.е. хранится там может что угодно, и это что угодно будет возвращаться при getAttribute, а должна строка.

Мне не нравицо, что это вообще храницо в атрибутах, а не свойствах, как и должно.

Riim 01.09.2009 15:57

Kolyaj,
я уже не про getAttribute, а про innerHTML .

Octane 01.09.2009 15:58

B~Vladi, если тебя это успокоит, то jQuery тоже добавляет свои свойства (а значит и атрибуты в случас с IE) в DOM-элементы:
<div id="abc" jQuery1251806138031="2">

:)

B~Vladi 01.09.2009 16:00

Цитата:

Сообщение от Octane
B~Vladi, если тебя это успокоит, то jQuery тоже добавляет свои свойства

О, да, спасибо! Я всегда знал, что библиотеки зло. Похоже их это тоже не сильно волнует:)

Kolyaj 01.09.2009 16:05

Цитата:

Сообщение от B~Vladi
Мне не нравицо, что это вообще храницо в атрибутах, а не свойствах, как и должно.

Все хранится как раз в свойствах. В ИЕ, грубо говоря, нет атрибутов, они упрощены до свойств.

B~Vladi 01.09.2009 16:08

Цитата:

Сообщение от Kolyaj
В ИЕ, грубо говоря, нет атрибутов, они упрощены до свойств.

Да, я это понял из твоих постов выше и статьи. Это даже не ишак, а пёс какой-то дворовый.

Octane 01.09.2009 16:08

Цитата:

Сообщение от B~Vladi
Похоже их это тоже не сильно волнует

С другой стороны, если бы из-за этого возникали какие-то проблемы, то многотысячная аудитория пользователей это фреймворка уже бы выявила их.

B~Vladi 01.09.2009 16:09

Цитата:

Сообщение от Octane
С другой стороны, если бы из-за этого возникали какие-то проблемы

Аха, это была моя первая мысль после твоего поста:)
Уф... ну значит всё норм вродебэ...


Часовой пояс GMT +3, время: 08:11.