2017-07-29 6 views
0

Eine Spalte in meiner DataTable heißt Logion Link. Es zeigt für jeden Datensatz eine URL an, aber diese URL ist standardmäßig nicht aktiv. Gibt es eine einfache Möglichkeit, das zu beheben?Erstellen einer Spalte mit Links in jeder Zeile meiner DataTable aktiv, verkürzt die Spalte auch?

Das andere Problem ist, dass .... Mit der vollständigen URL angezeigt wird, ist die Spalte extrem lang. Es würde mir nichts ausmachen, den Text der Spalte so zu ändern, dass ich einfach "url" sage, wobei diese Zeichenfolge ein Hyperlink zur logeion-URL ist, was wahrscheinlich eine Verkürzung bewirken würde. Wie beginne ich das zu tun?

Ich gehe davon aus, dass ich zwei Fliegen mit einer Klappe schlagen kann, wenn ich einen Weg finde, den HTML-Code für eine DataTables-Zeile und eine bestimmte DataTables-Spalte zu bearbeiten, dann könnte ich einen Weg finden, zu sagen "für diese bestimmte Spalte (Logion Link) jeder Zeile, machen Sie ihr HTML ein <a> Tag und ändern Sie den Text für das <a> Tag. "

Es ist nur ... im Moment bin ich mir nicht sicher, welcher Selektor oder Rückruf mir erlauben würde, den HTML-Code jeder Zeile zu ändern.

edit: Der Code mein Tables Objekt zur Initialisierung ist hier

 words_table = $("#words_generated").DataTable({ 
    "data" : word_data_filtered, 
    "columns" : columns,  //should this be global_ocolumns 
    "aLengthMenu": [[25, 50, 100, 200, -1], 
      [25, 50, 100, 250, "All"]], 
    "pageLength": 100, 
}); 

wo Spalten eine Liste von Spalten ist

   columns.push({ 
       "name" : $(this).data("fieldname"), 
       "data" : "fields."+$(this).data("fieldname"), 
       "visible" : $(this).data("visible") 
     }); 

Objekte Ich habe versucht, speziell auf deeect, wenn der Name der Spalte " logeion_url "(und ja, das funktioniert mit den .data (" fieldname ") Attributen), aber das führte zu Syntaxfehlern.

   if ($(this).data("fieldname") == "logeion_url") { 
      columns.push({ 
       "name": $(this).data("fieldname"), 
       "data" : "fields.logeion_url", 
       "fnCreatedCell": function (nTd, sData, oData, iRow, iCol) { 
     $(nTd).html("<a href="+sData.fields.logeion_url+">"url"</a>"); 
        } 
       , 
       "visible" : $(this).data("visible") 
     }); 

Ich habe versucht, aus der dieses Forums Vorschlag zu gehen https://www.datatables.net/forums/discussion/25111/hyperlink-in-td

+1

Verwenden Sie render. Es gibt ein Beispiel Rendering einen Link hier https://datatables.net/reference/option/columns.render –

+0

Sie haben Recht! Ich werde meinen Code kopieren und einfügen. –

Antwort

0

also ja, die Antwort zu machen zu verwenden ist. Ich werde meinen Code veröffentlichen, obwohl eine Menge davon auf Hintergrundwissen meiner Javascript-Datei als Ganzes beruht. Aber ich werde zumindest darüber reden, was mich syntaktisch auf den Kopf gestellt hat, falls jemand anderes verwirrt wird.

Ich machte eine Bedingung, um zu identifizieren, wenn die URL-Spalte initialisiert wurde. Dann habe ich es wie alle anderen Spalten gestartet, außer ich habe den render: Teil eingefügt.

   if ($(this).data("fieldname") == "logeion_url") { 
      console.log("CREATING LOGEION URL COLUMN"); 
      columns.push({ 
       "name": $(this).data("fieldname"), 
       "data" : fields.logeion_url, 
       "render" : function (data, type, full, meta) { 
       return '<a href="'+fields.logeion_url+'">Link</a>'; 
       }, 
       "visible" : $(this).data("visible") 
      }); 
     } 
  • Ich bin immer noch nicht ganz sicher, was „Daten“ bedeuten, da ich Daten erwartet so ursprünglich auf den gleichen Wert wie fields.logeion_url eingestellt wird, die return-Anweisung lesen '<a href="'+data+'">Link</a>' Dies führte zu einem undefinierte URL wird erstellt. fields.logeion_url definitiv enthält die URL für jeden Datensatz, weshalb dies funktioniert.
Verwandte Themen