Я обнаружил две проблемы.
Во-первых, вы пытались установить все .message
DIV на высоту первого DIV, поэтому, если первый DIV был скрыт, он никогда не будет работать.
Вторым было то, что функция attr jQuery предназначена только для атрибутов узла.
Этот метод работает лучше и корректно прокручивает все div:
$(".messages").each(function(idx, node) { node.scrollTop = node.scrollHeight; });
В качестве альтернативы, вы можете улучшитьпроизводительность с помощью этого селектора:
$(".messages:visible").each(function(idx, node) { node.scrollTop = node.scrollHeight; });
, который работает на видимых узлах сообщений.