Запустите консоль Firebug и попробуйте это.
Сравните это:
$('body').data('x',1);
$(thisx).remove();
console.log($('body').data('x'));
к этому:
$('body').data('x',1);
$(this.x).remove();
console.log($('body').data('x'));
Заметили разницу? Если thisx
не определено, он немедленно выдаст ошибку ссылки. Если x
является неопределенным свойством this
, jQuery вернет документ в виде набора результатов. Далее jQuery попытается удалить ваш документ (чего не может), но перед этим удалит все данные, прикрепленные к любому дочернему элементу документа. Таким образом, уничтожая ваше хранилище данных.
Примечание: this
может быть любой ссылкой на элемент или объектом. Вам нужно только, чтобы jQuery пытался получить доступ к неопределенному свойству.
(Поговорим о боли. Она молча терпит неудачу, и я пытаюсь выяснить, почему мои данные внезапно отсутствуют. Я отслеживаю это в особом случае, когда ссылка на элемент не была определена в конкретной ситуации. )
Итак, мои вопросы:
1) Перед отправкой отчета об ошибке правильно ли я анализирую это? Также, если кто-то знает, что это известная проблема, дайте мне знать. Я не смог найти его в баг-трекере, но интерфейс не так хорош (или, может быть, я ошибся).
2) Почему в конечном итоге какая-то разница? Я предполагаю, что thisx
вычисляется немедленно, что вызывает исключение, в то время как this.x
является ссылкой, которая передается и оценивается в вызываемой функции, верно? (где я думаю, что строка selector = selector || document
; является виновником.
3) Предложения о том, как с этим справиться? Полагаю, мне следует проверить, что любая / каждая ссылка на элемент или свойство объекта (например, сохраненные селекторные строки) определены ранее Я передаю его jQuery при удалении чего-либо.