2012-01-09 3 views
2

следующие цепи работ:Ссылка на текущий объект в 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?

ответ

1

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

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

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

+0

Жаль, что нужно сломать цепь. Ты прав. – tiktak

1

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

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

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

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

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

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

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

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

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

+0

Не $ ('# chat') [0] возвращает элемент dom vs. $ ('# chat'). Eq (0), который вернет набор jquery? – DyeA

+0

@ DyeA Да, в моем коде 'chat' является ссылкой на элемент DOM. Я предпочитаю, чтобы мои ссылки были «чистыми», а не обернутыми в объекты jQuery. –

+0

Ух: «Ну, это очевидно». Очевидно, это не очевидно для OP. – bergie3000

 Смежные вопросы

  • Нет связанных вопросов^_^