在Jquery链中引用当前对象

时间:2012-01-09 21:18:23

标签: javascript jquery jquery-scrollable jquery-chaining

以下链条有效:

    $("</p>").html('message').hide().appendTo("#chat").fadeIn()
.parent().scrollTop($('#chat')[0].scrollHeight);

但这不是:

    $("</p>").html('message').hide().appendTo("#chat").fadeIn()
.parent().scrollTop($(this)[0].scrollHeight);

this.scrollHeight也不起作用。 如何在jquery链中获取当前对象引用?

3 个答案:

答案 0 :(得分:2)

您只能访问回调中的当前对象。您无法访问链中的当前对象。

试试这个:

var $parent = $("</p>").html('message').hide().appendTo("#chat").fadeIn().parent();
$parent.scrollTop($parent[0].scrollHeight);

如果你真的不希望脱离你的链,你可以重新选择:

$("</p>").html('message').hide().appendTo("#chat").fadeIn()
.parent().scrollTop($("#chat")[0].scrollHeight);

但我强烈建议你不要这样做。没有必要两次选择相同的DOM元素。

答案 1 :(得分:1)

在您的第二个代码段中,this未指向#chat这就是为什么它不起作用。 this主要指向调用函数实例或触发任何事件的对象。

您可以尝试这样的事情

var $p = $("</p>").html('message').hide().appendTo("#chat");

$p.fadeIn().parent().scrollTop($p[0].scrollHeight);

答案 2 :(得分:1)

嗯,很明显。 #chat元素是一个静态元素,您可以动态地为其添加段落。因此,您希望事先获得对该元素的引用(例如,在页面初始化时):

var chat = $( '#chat' )[0];

现在,你这样做:

$( '<p />' ).html( 'message' ).hide().appendTo( chat ).fadeIn();
$( chat ).scrollTop( chat.scrollHeight );

因此,我们的想法是在页面初始化时检索对主要静态元素(聊天框,工具栏,面板,导航等)的引用,然后在整个应用程序代码中使用这些引用。