以下链条有效:
$("</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链中获取当前对象引用?
答案 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 );
因此,我们的想法是在页面初始化时检索对主要静态元素(聊天框,工具栏,面板,导航等)的引用,然后在整个应用程序代码中使用这些引用。