80

我正在尝试向tbody表中添加行。但我在实现这一目标方面遇到了问题。首先,在从 html 页面更改下拉菜单时调用发生所有事情的函数。我创建了一个tr字符串td,其中包含包含 html 元素、文本和其他内容的所有内容。但是当我尝试使用以下方法将生成的行添加到表中时:

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

我遇到一个错误。表的名称是tblEntAttributes,我正在尝试将其添加到tbody.

实际上发生的事情是 jQuery 无法tblEntAttributes作为 html 元素获取。但我可以使用它访问它documemt.getElementById("tblEntAttributes");

有什么方法可以通过向tbody表中添加行来实现这一点。可能是绕道之类的。

这是整个代码:

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); 

我忘记提到的一件事是编写此代码的函数实际上是 ajax 调用的成功回调函数。我可以使用访问表格,document.getElementById("tblEntAttributes")但由于某种原因$(#tblEntAttributes)似乎不起作用。

4

6 回答 6

119

("#tblEntAttributes tbody")

需要是

$("#tblEntAttributes tbody").

您没有选择具有正确语法的元素

这是两者的示例

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

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

工作 http://jsfiddle.net/xW4NZ/

于 2012-06-01T13:51:44.567 回答
38

用这个

$("#tblEntAttributes tbody").append(newRowContent);
于 2014-10-16T11:56:22.773 回答
17

我从来没有遇到过这样奇怪的问题!oO

你知道问题是什么吗?$ 不工作。我用 jQuery 尝试了相同的代码,jQuery("#tblEntAttributes tbody").append(newRowContent);它就像一个魅力!

不知道为什么会出现这个奇怪的问题!

于 2012-06-04T06:33:37.837 回答
6

这是使用您提到的 html 下拉列表的 appendTo 版本。它在“更改”上插入另一行。

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

有一个例子供你玩。祝你好运!

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

于 2012-06-01T14:21:43.783 回答
3

正如@wirey所说appendTo应该可以工作,如果没有,那么你可以试试这个:

$("#tblEntAttributes tbody").append(newRowContent);
于 2012-06-01T13:59:05.873 回答
2

使用 Lodash,您可以创建一个模板,您可以通过以下方式执行此操作:

    <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>

这里是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++;
            });
        });

这是在jsbin中

于 2017-08-08T23:41:11.523 回答