Ich füge einer Tabelle mithilfe von jQuery dynamisch Zeilen hinzu. Das table
ist in einem, div
was overflow:auto
somit eine vertikale Bildlaufleiste verursacht hat.
Ich möchte jetzt meinen Container automatisch div
in die letzte Zeile scrollen . Was ist die jQuery-Version von tr.scrollintoView()
?
element.scrollIntoView()
Wird einfach funktionieren.Antworten:
var rowpos = $('#table tr:last').position(); $('#container').scrollTop(rowpos.top);
sollte den Trick machen!
quelle
fixed scrolling
funktioniert nicht mit der neuen Funktionalität / dem neuen Plugin von datatable.Das Folgende funktioniert besser, wenn Sie zu einem beliebigen Element in der Liste scrollen müssen (anstatt immer nach unten):
function scrollIntoView(element, container) { var containerTop = $(container).scrollTop(); var containerBottom = containerTop + $(container).height(); var elemTop = element.offsetTop; var elemBottom = elemTop + $(element).height(); if (elemTop < containerTop) { $(container).scrollTop(elemTop); } else if (elemBottom > containerBottom) { $(container).scrollTop(elemBottom - $(container).height()); } }
quelle
Plugin, das nur bei Bedarf (mit Animation) scrollt
Ich habe ein jQuery-Plugin geschrieben , das genau das tut, was es verspricht (und auch genau das, was Sie benötigen ). Das Gute ist, dass der Container nur dann gescrollt wird, wenn das Element tatsächlich deaktiviert ist. Andernfalls wird kein Bildlauf durchgeführt.
So einfach geht das:
$("table tr:last").scrollintoview();
Es findet automatisch den nächsten scrollbaren Vorfahren, der überschüssigen Inhalt hat und Bildlaufleisten anzeigt. Wenn es also einen anderen Vorfahren
overflow:auto
gibt, der nicht scrollbar ist, wird er übersprungen. Auf diese Weise müssen Sie kein scrollbares Element bereitstellen, da Sie manchmal nicht einmal wissen, welches scrollbar ist (ich verwende dieses Plugin auf meiner Sharepoint-Site, auf der Content / Master unabhängig vom Entwickler ist, sodass ich keinen Einfluss darauf habe - HTML kann sich ändern Wenn die Site betriebsbereit ist, können auch scrollbare Container verwendet werden.quelle
var target = $(selector); target.get(0).scrollIntoView();
viel einfacher:
$("selector for element").get(0).scrollIntoView();
Wenn mehr als ein Element im Selektor zurückgegeben wird, erhält get (0) nur das erste Element.
quelle
Dieses ausführbare Beispiel zeigt, wie scrollIntoView () verwendet wird, das in allen modernen Browsern unterstützt wird: https://developer.mozilla.org/en-US/docs/Web/API/Element.scrollIntoView#Browser_Compatibility
Im folgenden Beispiel wird jQuery verwendet, um das Element mit auszuwählen
#yourid
.$( "#yourid" )[0].scrollIntoView();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p id="yourid">Hello world.</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p>
quelle
var elem=jQuery(this); elem[0].scrollIntoView(true);
quelle
this.scrollIntoView(true)
viel einfacher?Wenn Sie nur scrollen möchten, können Sie die scrollTop-Methode von jQuery verwenden. http://docs.jquery.com/CSS/scrollTop
var table = jQuery( 'table' ); table.scrollTop( table.find( 'tr:last' ).scrollTop() );
So etwas vielleicht?
quelle
Ich habe einen Fall gefunden (Überlauf div> table> tr> td), in dem das Scrollen zur relativen Position des tr nicht funktioniert. Stattdessen musste ich den Überlaufcontainer (div) mit scrollTop nach scrollen
<tr>.offset().top - <table>.offset().top
. Z.B:$('#container').scrollTop( $('#tr').offset().top - $('#td').offset().top )
quelle
Gleich von oben mit wenig Modifikation
function focusMe() { var rowpos = $('#FocusME').position(); rowpos.top = rowpos.top - 30; $('#container').scrollTop(rowpos.top); }
<html> <script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous"></script> <body> <input type="button" onclick="focusMe()" value="focus"> <div id="container" style="max-height:200px;overflow:scroll;"> <table> <tr> <td>1</td> <td></td> </tr> <tr> <td>2</td> <td></td> </tr> <tr> <td>3</td> <td></td> </tr> <tr> <td>4</td> <td></td> </tr> <tr> <td>5</td> <td></td> </tr> <tr> <td>6</td> <td></td> </tr> <tr> <td>7</td> <td></td> </tr> <tr> <td>8</td> <td></td> </tr> <tr> <td>9</td> <td></td> </tr> <tr id="FocusME"> <td>10</td> <td></td> </tr> <tr> <td>11</td> <td></td> </tr> <tr> <td>12</td> <td></td> </tr> <tr> <td>13</td> <td></td> </tr> <tr> <td>14</td> <td></td> </tr> <tr> <td>15</td> <td></td> </tr> <tr> <td>16</td> <td></td> </tr> <tr> <td>17</td> <td></td> </tr> <tr> <td>18</td> <td></td> </tr> <tr> <td>19</td> <td></td> </tr> <tr> <td>20</td> <td></td> </tr> </table> </div> </body> </html>
quelle
$( "#yourid" )[0].scrollIntoView();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p> <p id="yourid">Hello world.</p> <p>..</p> <p>..</p> <p>..</p> <p>..</p>
quelle
Ich konnte Abhijit Raos Antwort oben keinen Kommentar hinzufügen, daher sende ich dies als zusätzliche Antwort.
Ich musste die Tabellenspalte in einer breiten Tabelle anzeigen lassen, also fügte ich der Funktion die Funktionen zum Scrollen nach links hinzu. Wie jemand erwähnt hat, springt es beim Scrollen, aber es hat für meine Zwecke funktioniert.
function scrollIntoView(element, container) { var containerTop = $(container).scrollTop(); var containerLeft = $(container).scrollLeft(); var containerBottom = containerTop + $(container).height(); var containerRight = containerLeft + $(container).width(); var elemTop = element.offsetTop; var elemLeft = element.offsetLeft; var elemBottom = elemTop + $(element).height(); var elemRight = elemLeft + $(element).width(); if (elemTop < containerTop) { $(container).scrollTop(elemTop); } else if (elemBottom > containerBottom) { $(container).scrollTop(elemBottom - $(container).height()); } if(elemLeft < containerLeft) { $(container).scrollLeft(elemLeft); } else if(elemRight > containerRight) { $(container).scrollLeft(elemRight - $(container).width()); } }
quelle