После использования IE8 создал в Инструментах Разработчиков впервые, я заметил, что jQuery присоединяет атрибут к некоторым моим элементам: сопроводительный текст http://thebe.jtan.com/~vince/stack/jquery.PNG
Я никогда не замечал это прежде. На самом деле это не обнаруживается в Firebug... Я только вижу его впервые теперь в Инструментах Разработчика IE8. Кто-либо знает то, что jQuery использует это для, и почему он скрыт в поджигателе?
Источник jQuery довольно легко читается, и вы можете посмотреть, что делает функция data
.
Подведем итоги:
'jQuery'+(+new Date)
uuid
, которая начинается с "1"jQuery. cache
- пустой объектУстановка/получение любых "данных" для HTML-элемента/объекта будет использовать свойство expando
объекта для хранения ссылки в jQuery.cache
- примерно так:
// получите идентификатор кэша элементов или создайте новый идентификатор кэша: var id = elem[expando] || (elem[expando] = uuid++); // получить кэш для элемента, или создать его: var data = jQuery.cache[id] || (jQuery.cache[id] = {});
Обработчики событий хранятся в свойствах events
и handle
этого внутреннего объекта data
.
Таким образом, внутри все свойства, назначаемые с помощью .data()
используют этот атрибут "expando" на HTML для хранения ключа во внутреннем кэше данных jQuery. Обработчики событий jQuery также хранятся в этом же кэше. Числовое значение, присваиваемое expando
, представляет собой увеличивающийся счетчик, который ссылается на его местоположение в объекте кэша jQuery.
Я сомневаюсь, что это скрыто в firebug, поскольку я также видел внутри него объект данных jquery.
Я считаю, что jQuery или любой другой плагин, который вы используете, просто добавляет это в IE в качестве исправления / обходного пути для различных ошибок / недостатков, специфичных для браузера.
Если вы используете метод jQuery .html () для поиска строки HTML, будьте осторожны, если этот HTML содержит какие-либо элементы, для которых зарегистрированы события - вы можете получить немного больше, чем вы рассчитывали.
Не используйте .html () для правильно сформированных фрагментов XML.
Моим быстрым решением было изменить порядок работы. Я просто выполнил привязку события jQuery после того, как данные были отправлены. Таким образом, я усвоил тяжелый урок, учитывая количество времени, которое я потратил на выдергивание волос, но, тем не менее, важный.
Я предполагаю, что вы используете 1.3.1, проблема которого была исправлена в более поздних версиях. Так что просто обновите и, вероятно, все будет в порядке.
jQuery использует этот "экспандер" для привязки данных и событий к объектам. Похоже, что это работает вместе с кэшем данных и событий. Хотелось бы услышать более подробное объяснение.