Атрибут jQuery автоматически добавляется к элементам - PullRequest
13 голосов
/ 03 мая 2010

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

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

Ответы [ 4 ]

14 голосов
/ 04 мая 2010

Источник 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.

4 голосов
/ 04 мая 2010

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

0 голосов
/ 04 мая 2010

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

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

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

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

0 голосов
/ 03 мая 2010

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

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

...