jQuery добавляет странный атрибут к узлам

Я использую IE8 и jQuery 1.4.2. Моя веб-страница больше не отображается правильно, и быстрый просмотр HTML-кода в отладчике показывает, что каждый элемент теперь имеет новый атрибут под названием «jQuery1279875396122», значение которого представляет собой небольшое целое число, очевидно уникальное для каждого узла.

Глядя на источник jQuery, я вижу, что длинное число происходит от (new Date) .getTime (), но это предел моего понимания без дополнительных исследований.

Я не знаю, связано ли это с моей проблемой рендеринга, но я никогда не замечал этого раньше, в IE8 или любом другом браузере. Может кто-нибудь объяснить, что это за атрибуты?


person Charles Anderson    schedule 23.07.2010    source источник
comment
Проверяет ли ваш HTML?   -  person Pekka    schedule 23.07.2010
comment
Используете ли вы функцию jQuery data для присвоения данных элементам? Я думаю, что эти атрибуты добавляются к элементам, чтобы отслеживать уникальные узлы. Однако это никак не должно повлиять на рендеринг. Можете ли вы опубликовать URL-адрес?   -  person RoToRa    schedule 23.07.2010
comment
Мы действительно используем data () для некоторых элементов. Боюсь, я не могу отправить URL-адрес, так как это проект разработки, защищенный корпоративным брандмауэром.   -  person Charles Anderson    schedule 23.07.2010
comment
Какую версию jQuery вы используете? Несколько лет назад была зарегистрирована ошибка, но она была закрыта как дубликат (проявление другой ошибки), а дубликат исправлен в 1.3.2. Похоже на похожий случай.   -  person Andy E    schedule 23.07.2010


Ответы (1)


jQuery использует эти свойства "expando" для отслеживания данных, связанных с элементами. jQuery использует свой API данных для обработки событий, а также любые общие данные, которые вы можете захотеть привязать к элементу (используя $.data).

Свойство (jQuery1279875396122) будет иметь значение, связанное с позицией в jQuery.cache.

Причина, по которой jQuery не сохраняет данные непосредственно в элемент (как обычные свойства), заключается в том, чтобы избежать утечек памяти и, как правило, быть немного менее навязчивым.


В качестве примера, когда вы привязываете обработчик событий к элементу, например:

jQuery('div').click(doSomething);

Функция doSomething будет храниться в jQuery.cache, и на элементарном уровне ее позиция (или, скорее, позиция объекта, который на нее ссылается) будет присвоена свойству элемента jQuery1279875396122. jQuery по-прежнему будет использовать собственный API браузера для привязки к событию элемента, но при его запуске jQuery выполнит поиск (в jQuery.cache) и вызовет правильные обработчики.

РЕДАКТИРОВАТЬ: Чтобы было ясно, эти свойства не являются поводом для беспокойства. Вы должны ожидать их появления на всех элементах, которые имеют какие-либо данные, привязанные через jQuery (включая обработчики событий). Я был бы очень удивлен, если бы это было причиной вашей проблемы с рендерингом.

person James    schedule 23.07.2010
comment
Интересно. Но я никогда раньше не видел этих атрибутов и до сих пор не вижу их в Firefox / Firebug. Кроме того, он есть у каждого узла, а не только у тех, в которых мы храним данные. - person Charles Anderson; 23.07.2010
comment
@Charles Anderson, возможно, вы намеренно не сохранили данные в этих узлах. jQuery использует свой API данных для внутренних задач. Кроме того, свойство expando отображается только как атрибут в IE (AFAIK). FF и другие браузеры рассматривают его как обычное свойство DOM, поэтому оно не будет отображаться в реальном HTML. - person James; 23.07.2010
comment
Просто подумал, что добавлю вотума доверия к тому факту, что это вообще не повлияет на рендеринг. - person Chris; 23.07.2010
comment
Думаю, вы правы, что это не вызывает у меня проблем с рендерингом. Обычно я отлаживаю в Firebug, потому что он намного лучше отладчика IE. Поэтому я не трачу много времени на рассмотрение HTML с точки зрения IE. Теперь, когда у меня возникла проблема, связанная с IE8, мне пришлось много заниматься этим, и я впервые заметил эти атрибуты expando, отсюда и совпадение. (Кстати, иногда IE8 их не показывает.) Спасибо за полное объяснение того, что они из себя представляют. - person Charles Anderson; 23.07.2010