Атрибут jQuery автоматически добавлен к элементам

После первого использования IE8, встроенного в Developers Tools, я заметил, что jQuery привязывает атрибут к некоторым из моих элементов: alt text http://thebe.jtan.com/~vince/stack/jquery.PNG

Я никогда не замечал этого раньше. На самом деле, это не отображается в Firebug... Я вижу это впервые в IE8 Developer Tools. Кто-нибудь знает, для чего это использует jQuery, и почему он скрыт в firebug?

Ответ 1

Источник jQuery довольно легко читается, и вы можете посмотреть, что делает функция data.

Подводя итог:

  • jQuery имеет переменную с именем 'expando', которая является 'jQuery'+(+new Date)
  • jQuery имеет другую переменную с именем uuid, которая начинается с "1"
  • jQuery.cache - пустой объект
  • Настройка/Получение каких-либо "данных" в HTML-элементе/объекте будет использовать свойство expando для объекта для хранения ссылки в jQuery.cache - вроде как:

    // get the elements cache id, or create a new cache id:
    var id = elem[expando] || (elem[expando] = uuid++);
    // get the cache for the element, or create it:
    var data = jQuery.cache[id] || (jQuery.cache[id] = {});
    
  • Обработчики событий хранятся в свойствах events и handle этого внутреннего объекта data.

Итак, внутренне все свойства, которые назначаются с помощью .data(), используют этот атрибут "expando" в HTML для хранения ключа в jQuery кэш данных. Обработчики событий jQuery также хранятся в этом же кеше. Числовое значение, присвоенное expando, является счетчиком приращений, который ссылается на его местоположение в объекте кеша jQuery.

Ответ 2

jQuery использует этот "expando" для привязки данных и событий к объектам. Похоже, что он работает вместе с кешем данных и событий. Мне бы хотелось услышать более подробное объяснение.

Ответ 3

Я сомневаюсь, что он скрыт в firebug, так как я видел объект данных jquery внутри этого.

Я считаю, что jQuery или любой другой плагин, который вы используете, просто добавляет, что в IE как исправление/обходной путь для различных ошибок/недостатков браузера.

Ответ 4

Если вы используете метод jQuerys.html() для поиска строки HTML, будьте осторожны, если этот HTML содержит любые элементы, у которых зарегистрировано событие, вы можете получить немного больше, чем вы рассчитывали.

Dont зависит от .html() для хорошо сформированных фрагментов XML.

Мое быстрое решение заключалось в изменении порядка ведения бизнеса. Я просто выполнил привязку события jQuery после отправки данных. Трудный урок узнал тогда, учитывая количество времени, которое я потратил на разрывание моих волос, но тем не менее важный.

Я предполагаю, что вы используете 1.3.1, который был исправлен в более поздних версиях. Так что просто обновляйте и probabaly, вы будете в порядке.