2659 Stimmen

Tabellenzeile in jQuery hinzufügen

Was ist die beste Methode in jQuery, um eine zusätzliche Zeile zu einer Tabelle als die letzte Zeile hinzufügen?

Ist das akzeptabel?

$('#myTable').append('<tr><td>my data</td><td>more data</td></tr>');

Gibt es Beschränkungen für das, was Sie zu einer solchen Tabelle hinzufügen können (z. B. Eingaben, Auswahlen, Anzahl der Zeilen)?

4 Stimmen

Vielen Dank, Ash. Ich bin auch gerade lernen jQuery und finden es schwer, herauszufinden, den besten Weg, vor allem einfache Dinge. Der Grund, warum sie als 2 Fragen sind, ist, weil ich eine gepostet und dann fast eine Stunde später erkannte ich, dass ich die andere in gesetzt haben sollte und dachte nicht, ich sollte die erste ändern.

33 Stimmen

19 Stimmen

FYI - Vermeiden Sie die Verwendung mehrerer Anhänge (verlangsamt die Leistung enorm), sondern bauen Sie Ihre Zeichenfolge oder verwenden Sie JavaScript join, die viel schneller ist.

40voto

Curtor Punkte 717

Ich empfehle

$('#myTable > tbody:first').append('<tr>...</tr><tr>...</tr>'); 

im Gegensatz zu

$('#myTable > tbody:last').append('<tr>...</tr><tr>...</tr>'); 

El first y last Schlüsselwörter wirken auf den ersten oder letzten zu startenden Tag, nicht auf den geschlossenen. Daher ist dies besser für verschachtelte Tabellen geeignet, wenn die verschachtelte Tabelle nicht geändert, sondern zur Gesamttabelle hinzugefügt werden soll. Zumindest habe ich dies festgestellt.

<table id=myTable>
  <tbody id=first>
    <tr><td>
      <table id=myNestedTable>
        <tbody id=last>
        </tbody>
      </table>
    </td></tr>
  </tbody>
</table>

40voto

sulest Punkte 966

Meiner Meinung nach ist der schnellste und klarste Weg

//Try to get tbody first with jquery children. works faster!
var tbody = $('#myTable').children('tbody');

//Then if no tbody just select your table 
var table = tbody.length ? tbody : $('#myTable');

//Add row
table.append('<tr><td>hello></td></tr>');

hier ist die Demo Fiddle

Ich kann auch eine kleine Funktion empfehlen, um weitere html-Änderungen vorzunehmen

//Compose template string
String.prototype.compose = (function (){
var re = /\{{(.+?)\}}/g;
return function (o){
        return this.replace(re, function (_, k){
            return typeof o[k] != 'undefined' ? o[k] : '';
        });
    }
}());

Wenn Sie meinen String Composer verwenden, können Sie dies wie folgt tun

var tbody = $('#myTable').children('tbody');
var table = tbody.length ? tbody : $('#myTable');
var row = '<tr>'+
    '<td>{{id}}</td>'+
    '<td>{{name}}</td>'+
    '<td>{{phone}}</td>'+
'</tr>';

//Add row
table.append(row.compose({
    'id': 3,
    'name': 'Lee',
    'phone': '123 456 789'
}));

Hier ist die Demo Fiddle

0 Stimmen

Wenn Sie mehrere tbody Sie können mehrere Einsätze erhalten

0 Stimmen

Ja, das können Sie :) Sie können versuchen $("SELECTOR").last() um Ihre Tag-Sammlung einzuschränken

28voto

Nischal Punkte 938

Dies lässt sich leicht mit der Funktion "last()" von jQuery bewerkstelligen.

$("#tableId").last().append("<tr><td>New row</td></tr>");

9 Stimmen

Gute Idee, aber ich denke, dass Sie den Selektor in #tableId tr ändern möchten, da Sie jetzt die Tabelle erhalten würden, fügen Sie die Zeile unter der Tabelle.

25voto

Anton vBR Punkte 16653

Ich habe es auf diese Weise gelöst.

Verwendung von jquery

$('#tab').append($('<tr>')
    .append($('<td>').append("text1"))
    .append($('<td>').append("text2"))
    .append($('<td>').append("text3"))
    .append($('<td>').append("text4"))
  )

Schnipsel

$('#tab').append($('<tr>')
  .append($('<td>').append("text1"))
  .append($('<td>').append("text2"))
  .append($('<td>').append("text3"))
  .append($('<td>').append("text4"))
)

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<table id="tab">
  <tr>
    <th>Firstname</th>
    <th>Lastname</th> 
    <th>Age</th>
    <th>City</th>
  </tr>
  <tr>
    <td>Jill</td>
    <td>Smith</td> 
    <td>50</td>
    <td>New York</td>
  </tr>
</table>

0 Stimmen

Ich kann jetzt erfolgreich dynamische Daten in einer neuen Zeile hinzufügen, aber nachdem ich diese Methode verwendet habe, funktioniert mein benutzerdefinierter Filter nicht Haben Sie eine Lösung dafür?

0 Stimmen

Ich glaube, Sie müssen eine Art Aktualisierungsfunktion aufrufen. Schwierig zu sagen, ohne ein Beispiel.

19voto

Dominic Punkte 181

Ich verwende diese Methode, wenn es keine Zeile in der Tabelle gibt und die einzelnen Zeilen recht kompliziert sind.

style.css:

...
#templateRow {
  display:none;
}
...

xxx.html

...
<tr id="templateRow"> ... </tr>
...

$("#templateRow").clone().removeAttr("id").appendTo( $("#templateRow").parent() );

...

0 Stimmen

Ich danke Ihnen. Das ist eine sehr elegante Lösung. Ich mag, wie es die Vorlage innerhalb des Rasters hält. Es macht den Code so viel einfacher und leichter zu lesen und zu pflegen. Nochmals vielen Dank.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X