Jquery устанавливает $ (this) для другого элемента при его перетаскивании - PullRequest
0 голосов
/ 15 апреля 2011

Я пытаюсь установить $ (this) при перетаскивании элемента на новый, но я не могу заставить его работать без ошибки в моем Firebug:

invalid assignment left-hand side
$(this) = $("#external-events.temp-class-for-detection:last");

//Gives the same result. 
$(this) = $("#external-events.temp-class-for-detection:last")[0];

Приведенные выше примеры действительно работают в моем случае, но я все еще получаю ошибку, поэтому я предполагаю, что это не правильный способ сделать это.Я также пробовал другие способы сделать это (которые вообще не работают):

//Does not work at all.
$(this)[0] = $("#external-events.temp-class-for-detection:last")[0];
//Does not work at all.
$(this)[0] = $("#external-events.temp-class-for-detection:last");
//Does not work at all.
$(this).html("#external-events.temp-class-for-detection:last");

Вот более полная картина того, что я делаю:

$(this).html("<div class='external-event'>");
$(this).data('eventObject', { title: event.title, id :event.id });
$(this).text(event.title);
$(this).addClass("temp-class-for-detection");
$(this).addClass("external-event");
$(this).appendTo( "#external-events" );
$(this) = $("#external-events.temp-class-for-detection:last");

Это может выглядеть такужасный способ сделать это, но мне нужно переместить элемент $ (this) из его родительского div, добавить его в любой div и затем установить $ (this) обратно в себя.Просто теперь он ссылается на другой родительский div.

РЕДАКТИРОВАТЬ: Я хочу указать, что все это пытается сделать во время перетаскивания самого элемента.Кроме того, я получаю желаемый результат в Firefox, но с ошибкой в ​​Firebug.В IE элемент вообще не залипает.

Ответы [ 4 ]

2 голосов
/ 15 апреля 2011

Я думаю, вы немного перепутали с тем, что такое $ (this). ссылка на это - какая бы ни была текущая область. Например, $ (this) - это селектор jquery для текущей области.

вместо того, чтобы делать:

$(this) = $("#external-events.temp-class-for-detection:last");

просто сделайте это:

var _this = $("#external-events.temp-class-for-detection:last");

А теперь, когда вы захотите сослаться на селектор # external-events, просто _this.css

1 голос
/ 15 апреля 2011

Хм, я не уверен, почему вы должны это делать (не каламбур), но если вы должны, почему бы не использовать альтернативную переменную?Вы можете использовать знак доллара, если это вас радует:

$this = $("#external-events.temp-class-for-detection:last");

На самом деле, если я вас правильно понимаю, вы не можете просто использовать выражение .each()?Это немного глупо, но позволяет вам использовать $(this):

$(this).html("<div class='external-event'>");
$(this).data('eventObject', { title: event.title, id :event.id });
$(this).text(event.title);
$(this).addClass("temp-class-for-detection");
$(this).addClass("external-event");
$(this).appendTo( "#external-events" );

$("#external-events.temp-class-for-detection:last").each(function() {
  $(this).css('foo', 'bar'); // Now $(this) points to the thing above
});
0 голосов
/ 15 апреля 2011

Вам не нужно ничего делать.

$(this).appendTo( "#external-events" ); сменит родителя.$(this) будет продолжать указывать на перемещенный элемент.

0 голосов
/ 15 апреля 2011

Я думаю, что вы действительно хотите это сделать this:

var that = $(this).clone();

.. сделать все свои вещи, чтобы that

that.appendTo( "#external-events" );
$(this).replaceWith($("#external-events.temp-class-for-detection:last"));

Вам нужно клонировать это, потому чтов противном случае вся ваша работа будет просто заменена (и в новом месте, к которому вы добавили ее).Звучит так, будто вы хотите сделать кучу вещей, а затем заменить их оригинальное воплощение этим выбором.This должен сделать that.

...