Ссылка на текущий объект в цепочке Jquery

Работает следующая цепочка:

    $("</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 ответа

Решение

Вы получаете доступ только к текущему объекту внутри функции обратного вызова. Нет никакого способа получить доступ к текущему объекту в вашей цепочке.

Попробуй это:

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 дважды.

Ну, это очевидно. #chat Элемент является статическим элементом, и вы динамически добавляете к нему абзацы. Следовательно, вы хотите получить ссылку на этот элемент заранее (например, при инициализации страницы):

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

Теперь вы делаете это:

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

Таким образом, идея состоит в том, чтобы извлечь ссылки на основные статические элементы (окно чата, панель инструментов, панель, навигация и т. Д.) При инициализации страницы, а затем использовать эти ссылки по всему коду вашего приложения.

В вашем втором фрагменте кода this не указывает на #chat вот почему это не работает. this в основном указывает на экземпляр вызывающей функции или объект, вызвавший какое-либо событие.

Вы можете попробовать что-то вроде этого

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

$p.fadeIn().parent().scrollTop($p[0].scrollHeight);
Другие вопросы по тегам