Hinzufügen von Zeilen zu tbody einer Tabelle mit jQuery

74

Ich versuche, Zeilen zu tbodyeiner Tabelle hinzuzufügen . Aber ich habe Probleme damit. Erstens wird die Funktion, in der alles stattfindet, beim Ändern eines Dropdowns von einer HTML-Seite aufgerufen. Ich habe eine trZeichenfolge erstellt, die das gesamte tdInnere enthält, das die HTML-Elemente, den Text und andere Dinge enthält. Aber wenn ich versuche, diese generierte Zeile der Tabelle hinzuzufügen, indem ich:

$(newRowContent).appendTo("#tblEntAttributes tbody");

Ich habe einen Fehler festgestellt. Der Name der Tabelle ist tblEntAttributesund ich versuche, sie der hinzuzufügen tbody.

Tatsächlich kann jQuery nicht tblEntAttributesals HTML-Element abgerufen werden. Aber ich kann mit darauf zugreifendocumemt.getElementById("tblEntAttributes");

Gibt es eine Möglichkeit, dies zu erreichen, indem ich Zeilen zur tbodyTabelle hinzufüge? Vielleicht ein Bypass oder so.

Hier ist der gesamte Code:

var newRowContent = "<tr><td><input type=\"checkbox\" id=\"" + chkboxId + "\" value=\"" + chkboxValue + "\"></td><td>" + displayName + "</td><td>" + logicalName + "</td><td>" + dataType + "</td><td><input type=\"checkbox\" id=\"chkAllPrimaryAttrs\" name=\"chkAllPrimaryAttrs\" value=\"chkAllPrimaryAttrs\"></td><td><input type=\"checkbox\" id=\"chkAllPrimaryAttrs\" name=\"chkAllPrimaryAttrs\" value=\"chkAllPrimaryAttrs\"></td></tr>";

$("#tblEntAttributes tbody").append(newRowContent); 

Eine Sache, die ich vergessen habe zu erwähnen, ist die Funktion, in die dieser Code geschrieben wird, die Erfolgsrückruffunktion für einen Ajax-Aufruf. Ich kann mit auf die Tabelle zugreifen, document.getElementById("tblEntAttributes")aber aus irgendeinem Grund $(#tblEntAttributes)scheint es nicht zu funktionieren.

Anupam
quelle
Kannst du einen Ausschnitt aus deinem DOM posten (meistens die fragliche Tabelle)
El Guapo
1
$ ('# Table1> tbody') Entnommen aus stackoverflow.com/questions/6763006/…
Roman M

Antworten:

108

("#tblEntAttributes tbody")

muss sein

$("#tblEntAttributes tbody").

Sie wählen das Element nicht mit der richtigen Syntax aus

Hier ist ein Beispiel für beides

$(newRowContent).appendTo($("#tblEntAttributes"));

und

$("#tblEntAttributes tbody").append(newRowContent);

arbeiten http://jsfiddle.net/xW4NZ/

ᾠῗᵲ ᄐ ᶌ
quelle
7
Das Invertieren der Syntax ist möglicherweise besser lesbar : $("#tblEntAttributes tbody").append(newRowContent);.
Frédéric Hamidi
Ich habe den Code im OP hinzugefügt. Es wird weiterhin der Fehler ausgegeben: "Microsoft JScript-Laufzeitfehler: Wert der Eigenschaft 'append' kann nicht abgerufen werden: Objekt ist null oder undefiniert"
Anupam
Setzen Sie diese in $ (document) .ready (function () {// Code hier}); Möglicherweise wird der Code ausgeführt, bevor der Dom bereit ist, weshalb Sie das Element nicht auswählen können. Fand einen ähnlichen Fehler hier stackoverflow.com/questions/7173398/…
ᾠῗᵲ ᄐ ᶌ
$("#tblEntAttributes > tbody")für direkte Kinder?
mLstudent33
1
@ webNoob13 Ja, wenn du genauer sein willst, sollte das auch funktionieren
ᾠῗᵲ ᄐ ᶌ
37

benutze das

$("#tblEntAttributes tbody").append(newRowContent);
user3962745
quelle
16

Ich bin noch nie auf so ein seltsames Problem gestoßen! oO

Wissen Sie, wo das Problem lag? $ funktioniert nicht. Ich habe den gleichen Code mit jQuery ausprobiert jQuery("#tblEntAttributes tbody").append(newRowContent);und es funktioniert wie ein Zauber!

Keine Ahnung, warum dieses seltsame Problem auftritt!

Anupam
quelle
11
Sie sollten sich über jQuery.noConflict () informieren. Es kann sein, dass Sie andere Bibliotheken verwenden, die ebenfalls den $ alias api.jquery.com/jQuery.noConflict verwenden
ᾠῗᵲ ᄐ ᶌ
5

Hier ist eine AppendTo-Version mit dem von Ihnen erwähnten HTML-Dropdown. Bei "change" wird eine weitere Zeile eingefügt.

$('#dropdown').on( 'change', function(e) {
    $('#table').append('<tr><td>COL1</td><td>COL2</td></tr>');
});

Mit einem Beispiel, mit dem Sie spielen können. Viel Glück!

http://jsfiddle.net/xtHaF/12/

Andrew
quelle
3

Wie @wirey sagte appendTosollte funktionieren, wenn nicht, dann können Sie dies versuchen:

$("#tblEntAttributes tbody").append(newRowContent);
thecodeparadox
quelle
0

Mit Lodash können Sie eine Vorlage erstellen und dies auf folgende Weise tun:

    <div class="container">
        <div class="row justify-content-center">
            <div class="col-12">
                <table id="tblEntAttributes" class="table">
                    <tbody>
                        <tr>
                            <td>
                                chkboxId
                            </td>
                            <td>
                               chkboxValue
                            </td>
                            <td>
                                displayName
                            </td>
                            <td>
                               logicalName
                            </td>
                            <td>
                                dataType
                            </td>
                        </tr>
                    </tbody>
                </table>
                <button class="btn btn-primary" id="test">appendTo</button>
            </div>
        </div>
     </div>

Und hier geht das Javascript:

        var count = 1;
        window.addEventListener('load', function () {
            var compiledRow = _.template("<tr><td><input type=\"checkbox\" id=\"<%= chkboxId %>\" value=\"<%= chkboxValue %>\"></td><td><%= displayName %></td><td><%= logicalName %></td><td><%= dataType %></td><td><input type=\"checkbox\" id=\"chkAllPrimaryAttrs\" name=\"chkAllPrimaryAttrs\" value=\"chkAllPrimaryAttrs\"></td><td><input type=\"checkbox\" id=\"chkAllPrimaryAttrs\" name=\"chkAllPrimaryAttrs\" value=\"chkAllPrimaryAttrs\"></td></tr>");
            document.getElementById('test').addEventListener('click', function (e) {
                var ajaxData = { 'chkboxId': 'chkboxId-' + count, 'chkboxValue': 'chkboxValue-' + count, 'displayName': 'displayName-' + count, 'logicalName': 'logicalName-' + count, 'dataType': 'dataType-' + count };
                var tableRowData = compiledRow(ajaxData);
                $("#tblEntAttributes tbody").append(tableRowData);
                count++;
            });
        });

Hier ist es in jsbin

asmmahmud
quelle