Jquery在拖动它时将$(this)设置为另一个元素

时间:2011-04-15 19:22:59

标签: javascript jquery firebug draggable this

我正在尝试设置$(this) - 同时将the-element拖动到一个新元素,但我似乎无法在我的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 个答案:

答案 0 :(得分:2)

我认为你有点混淆$(this)。对此的引用是当前范围。 $(this)例如是当前范围的jquery选择器。

而不是:

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

这样做:

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

现在每当你想引用#external-events selector simple _this.css

答案 1 :(得分:1)

嗯,我不确定你为什么要这样做(没有双关语),但如果你必须这样做,为什么不使用替代变量?你可以使用美元符号,如果这让你开心:

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

实际上,如果我正确理解你,你不能只使用.each()声明吗?它有点hacky,但允许你使用$(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
});

答案 2 :(得分:0)

我认为你真正想做的是this

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

..将你所有的东西都做到that

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

您需要克隆它,否则您的所有工作都将被替换(并且在您将其附加到的新位置)。听起来你想做一堆东西,然后用那个选择替换它的原始化身。 This应该that

答案 3 :(得分:0)

你不需要做任何事情。

$(this).appendTo( "#external-events" );将更改父级。 $(this)将继续指向移动的元素。