これが機能しない理由は次のとおりです。
position() メソッドは、ウィンドウの上部までの相対距離を返します。div のサイズを制限したため、ウィンドウの上部までの距離は、必ずしもそれに対して測定したいものではありませんが、それを含む div に対するオフセットに対して測定する必要があります。
つまり、スクロールが上にあり、新しい要素を追加すると (下に移動します)、ウィンドウに対するオフセット/位置は、スクロールするピクセルの量と同じになるため、そのときに機能します。ただし、既に下までスクロールしている場合、要素とウィンドウの上部との間の距離は 100 ピクセル (div の高さ) 程度なので、100 ピクセルまでスクロールします。つまり、実際に上がります。
ScrollTo jQuery プラグインのチェックに興味があるかもしれません:
var rownum = 1;
$('input').click(function () {
$('table').append('<tr id=row-' + rownum + '><td>' + rownum + ': row</td></tr>');
$('#row-' + rownum).ScrollTo({
duration: 400,
easing: 'linear'
});
rownum++;
});
これがプラグインを使用したフィドルです
プラグインを使用しない場合の解決策を次に示します (ここに jsfiddle を示します)。
var rownum = 1;
$('input').click(function () {
$('table').append('<tr id=row-' + rownum + '><td>' + rownum + ': row</td></tr>');
var $row = $('#row-' + rownum);
var topOffset = $row.parent().parent().parent().scrollTop() + $row.position().top;
$('div').animate({scrollTop: topOffset + "px"}, 400);
rownum++;
});