Что добавляет атрибуты формы и jQuery в мой якорный тег? [Дубликат]

Есть программируемая библиотека под названием «xdotool»:

sudo apt-get install libxdo-dev libxdo2

cat test.c

  #include & lt; stdio.h & gt;  #include & lt; stdlib.h & gt;  #include & lt; xdo.h & gt;  #include & lt; unistd.h & gt;  int main () {xdo_t * x = xdo_new (": 0.0");  while (1) {printf («имитирующий Shift_L keypress \n»);  xdo_keysequence (x, CURRENTWINDOW, «Shift_L», 0);  сна (5);  } return 0;  }  

Выполните следующие действия:

gcc test.c -lxdo -o test

3
задан Byron Sommardahl 22 August 2011 в 18:05
поделиться

2 ответа

Это uuid / jQuery.expando, что jQuery добавляет к каждому элементу DOM, с которым он взаимодействует, для работы с утечками памяти браузера.

Код старого стиля ждал, когда window.onunload отвяжет данные Javascript из тегов DOM для предотвращения утечек памяти. JQuery избегает этого, используя простое число (например, в примере кода) в атрибуте, а затем сохраняя хэш-файл в Javascript тегов и номеров (который он вызывает uuid).

Имя странного атрибута это значение jQuery.expando, которое вы можете легко искать в коде и видеть, что каждый раз он устанавливается на случайное значение. Это делается для того, чтобы несколько копий jQuery могли сосуществовать на странице, не мешая друг другу.

Я не знаю, какой прецедент мне понадобился, когда мне нужно больше, чем один jQuery на на той же странице, и я подозреваю, что вам тоже не нужна эта функциональность - вы можете легко решить эту проблему, просто исключив эту функцию. Измените код, чтобы установить jQuery.expando на какое-то жестко закодированное значение, например «jquery», вместо случайного числа, и вам хорошо идти.

Будьте осторожны, чтобы никогда не использовать jQuery дважды в на той же странице! Хотя делать это случайно вводит много других странных побочных эффектов, а также (как и повторное использование $), так что точка может быть спорным.

Я иду в немного более подробно о jQuery.expando / UUID в этот вопрос: Почему JQuery не демонстрирует свою функциональность UUID?

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

Обновить

Вам нужно будет изменить источник jquery. Например, 1.6.2: http://code.jquery.com/jquery-1.6.2.js

Включает следующее:

jQuery.extend({
    cache: {},

    // Please use with caution
    uuid: 0,

    // Unique for each copy of jQuery on the page
    // Non-digits removed to match rinlinejQuery
    expando: "jQuery" + ( jQuery.fn.jquery + Math.random() ).replace( /\D/g, "" ),

Вы можете изменить линию expando следующим образом:

    // Does not support multiple copies of jQuery on the same page!
    // 0 included to match rinlinejQuery (/jQuery\d+/)
    expando: "jQuery0",
5
ответ дан Community 15 August 2018 в 18:04
поделиться
  • 1
    Не могли бы вы дать мне пример того, как установить jQuery.expando на что-то вроде «jquery»? – Byron Sommardahl 22 August 2011 в 18:07
  • 2
    – Chris Moschini 22 August 2011 в 18:45
  • 3
    Это был отличный ответ, но я не хочу изменять свой источник jquery. Вместо этого я решил запустить регулярное выражение в моем html-ответе и вручную отключить атрибуты, начинающиеся с «jquery». Этот вопрос помог мне выполнить это: stackoverflow.com/questions/7151269/… – Byron Sommardahl 22 August 2011 в 20:45
  • 4
    Откуда появился ваш HTML? JQuery добавляет эти атрибуты во время выполнения, на стороне клиента, в DOM после загрузки страницы. Если вы посмотрите на источник, вы увидите, что их нет. Итак, если вы используете только то, что генерирует сервер, вам не нужно регулярное выражение. Если, с другой стороны, вы используете DOM на стороне клиента, и вы изменяете HTML на самой странице, вы собираетесь сломать jQuery. – Chris Moschini 22 August 2011 в 21:09
  • 5
    Я использую WatiN, чтобы вытащить html из браузера клиента (в этом случае IE) после загрузки страницы. – Byron Sommardahl 22 August 2011 в 22:36

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

0
ответ дан NinjaBomb 15 August 2018 в 18:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: