以下链起作用:
$("</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链中获取当前对象引用?
您只能在回调中访问当前对象。您无法访问链中的当前对象。
试试这个:
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元素。
在您的第二个代码片段中,this
没有指向#chat
,这就是它不起作用的原因。this
主要指向调用函数实例或触发任何事件的对象。
你可以试试这种
var $p = $("</p>").html('message').hide().appendTo("#chat");
$p.fadeIn().parent().scrollTop($p[0].scrollHeight);
很明显。#chat
元素是一个静态元素,您正在动态地向其添加段落。因此,您希望预先获得对该元素的引用(例如,页面初始化):
var chat = $( '#chat' )[0];
现在,你这样做:
$( '<p />' ).html( 'message' ).hide().appendTo( chat ).fadeIn();
$( chat ).scrollTop( chat.scrollHeight );
因此,我们的想法是在页面初始化时检索对主要静态元素(聊天框、工具栏、面板、导航等)的引用,然后在整个应用程序代码中使用这些引用。