2016-04-27 9 views
0

Hallo auf anderer Seite ist habe ich eine Datentabelle, die wie dieseJQuery Datentabellen wählen Zeilen, die als erstes

$('.bt-datatable').DataTable(
     { 
     info: false, 
     paging: true, 
     pageLength: 5, 
     "aoColumnDefs": [ 
      { "bSearchable": false, "aTargets": [ 1, 2, 3 ] } 
     ] 
     } 
); 

enthalten ist Und das ist meine Datentabelle Html es die Schleife in rubin Sprache codiert hat, die die mehrere Zeilen erzeugt entsprechend die Benutzerdatensätze

<div class="table-responsive"style="display: none"> 
      <hr> 
      <table class="bt-datatable table table-striped click-row-datatable" cellspacing="0" width="100%"> 
      <thead> 
      <tr> 
       <th class="text-left">Name</th> 
       <th class="text-left">Status</th> 
       <th class="text-left">Start Date</th> 
      </tr> 
      </thead> 
      <tbody> 
      <% 
       @users.each do |user| 

      %> 
       <tr class='clickable-row' rel="<%= user.id %>"> 
        <td class="text-left"><%= user.name %></td> 
        <td class="text-left"><%= user.status %></td> 
        <td class="text-left"><%= user.start_time %></td> 

       </tr> 
      <% end %> 
      </tbody> 
      </table> 
     </div> 

ich habe ein Flash-Variable in ruby, die in flash[:user_id]

gespeichert ist, was ich mir den Blitz [irgendwie tue, ist erhalten: user_i d] gespeichert und nach, dass i wollen markieren Sie die Zeile, deren Attribut rel gleich flash [: user_id]

dies ist die Javascript, wenn die Seite geladen wird

var ele = $('[rel="<%= flash[:user_id] %>"]'); 
    ele.addClass('bg-info'); 

die addClass hervorhebt, die die Zeile in die Datentabelle, aber das Problem, dem ich gegenüberstehe, ist, wenn die Benutzer-ID-Zeile auf der anderen Seite als 1. ist, lädt sie nicht die Tabelle auf dieser Seite und hebt nicht nur hervor, sondern hebt nur hervor, wenn der Benutzer in der ist 1. Seite

+0

Sie Ihre Datenbank zu speichern, um es ist auf anderen Seiten verfügbar. 'localStorage' ist großartig für diesen Zweck. –

Antwort

0

Datatables verfügt über eine $()-Funktion, mit der Sie einen jQuery-Selektor über das gesamte t hinweg ausführen können fähig, nicht nur die sichtbaren Reihen. In Ihrem Fall wäre es so etwas wie:

var table = $('.bt-datatable').DataTable(
    { 
    info: false, 
    paging: true, 
    pageLength: 5, 
    "aoColumnDefs": [ 
     { "bSearchable": false, "aTargets": [ 1, 2, 3 ] } 
    ] 
    } 
); 

var ele = table.$('[rel="<%= flash[:user_id] %>"]'); 
ele.addClass('bg-info'); 

Da es jedoch scheint, wissen Sie bereits, welche Zeile zu der Zeit markieren rubin es macht, wäre es nicht besser, Rubin damit umgehen zu lassen? So etwas wie (Disclaimer: Ich bin nicht vertraut mit Ruby):

<tr class='clickable-row <% if user.id == flash[:user_id] %> bg-info<% end %>'> 

Teil II

die Seite zeigen, wo die ausgewählte Zeile ist, können Sie die row().show() Plugin nutzen könnten. Dazu müssen Sie das Plugin Skript hinzuzufügen, und in Ihrem Code, rufen show() auf die Zeile die richtige Seite zu zeigen:

var ele = table.$('.bg-info'); // TR element (assuming you used ruby to add the class) 
var row = table.row(ele); // Datatables row 
row.show().draw(false); // Show the page this row is in (and draw it) 

Oder kürzer:

table.row('.bg-info').show().draw(false); 
+0

das funktioniert teilweise, wie ich bin der Benutzer hervorgehoben, aber diese Seite der Datentabelle nicht ausgewählt, das Problem ist, wenn es Tausende von Benutzern in der Tabelle sagen wird und wenn der markierte Benutzer ist auf der 20. Seite möchte ich Laden Sie diese 20. Seite auf die Datentabelle – user4965201

+0

@ user4965201 Ich denke, das ist, was Sie wollen. Sie sollten Ihre Frage bearbeiten, um diese Anforderung hinzuzufügen –

Verwandte Themen