遍历表并在 js/jquery 中创建一个数组

Posted

技术标签:

【中文标题】遍历表并在 js/jquery 中创建一个数组【英文标题】:Iterate through table and create an array in js/jquery 【发布时间】:2018-01-30 22:30:26 【问题描述】:

我想遍历我的动态创建的表,并在每个索引处创建一个包含项目名称、客户名称和字段速率的元素数组,以填充和传递 JSON 对象

这是我的桌子的样子:

        <table id="project-table" class="table table-striped table-hover">
        <thead>
        <tr>
            <th>Project Name</th>
            <th>Client Name</th>
            <th>Field Rate</th>
            <th>Delete Row</th>
        </tr>
        </thead>
        <tbody>
        <%--jquery will append our data here...     --%>
        </tbody>
    </table>
    <button type="button" onclick="projectTable()" class="btn btn-primary">Add Row</button>

function projectTable() 

projectRows = projectRows + 1;

var $tbody = $('#project-table').find('tbody');
var $id = $("");
var $tr = $("<tr>");

$id.append(
    "<hidden id='projectId'/>" +
    "<hidden id='projectVersion'/>"
);

$tr.append(
    "<td>" + "<input class='form-control' id='inputProjectName' placeholder='Project Name' type='text'>" + "</td>" +
    "<td>" + "<input class='form-control' id='inputClientName' placeholder='Client Name' type='text'>" + "</td>" +
    "<td>" + "<input class='form-control' id='inputRate' placeholder='Rate' type='text'></td>" +
    "<td>" + "<input type='button' value='Delete' onclick='deleteRow(this)'>" + "</td>");
$tbody.append($id);
$tbody.append($tr);

projectTable() 每次单击“添加新行”按钮时都会被调用。 我希望能够根据已创建的行数创建一个数组,其中包含来自每一行的信息,如下所示:

            projectList: [
            
                id: projectId,
                version: projectVersion,
                projectName: projectName,
                clientName: clientName,
                fieldRate: fieldRate
            

但是对于多个对象,我尝试了一些不同的 for 循环,但它们对我不起作用。

【问题讨论】:

你试过什么?像$('#project-table').find('tr').each(...) 这样的简单循环遍历所有行,您只需从&lt;td&gt; 元素中提取所需的数据!? 我遇到的问题是弄清楚如何仅从前三个中提取数据,因为我不希望删除按钮成为提取的一部分。 【参考方案1】:

您可以通过选择所有tr 来实现,然后为每个选择input 元素来构建您的数据。

您当前代码中的一些问题:

您的行中不能有静态的id 属性值,因为id 值必须是唯一的 自定义hidden 元素不能是tbody 的子元素。我看不出你会需要这个元素。

我在您的代码中更改了一些其他内容,使其更像 jQuery:

function projectTable() 
    $('#project-table>tbody').append(
        $("<tr>").append(
            $("<td>").append($("<input>").addClass("form-control")
                .attr(placeholder: "Project Name", type: "text")),
            $("<td>").append($("<input>").addClass("form-control")
                .attr(placeholder: "Client Name", type: "text")),
            $("<td>").append($("<input>").addClass("form-control")
                .attr(placeholder: "Rate", type: "text")),
            $("<td>").append($("<input>").addClass("form-control delete")
                .attr(type: "button").val("Delete"))
        )
    );


$(document).on("click", ".delete", function () 
    $(this).closest("tr").remove();
);

$('#get').click(function () 
    var data = $.map($('#project-table>tbody>tr'), function (tr) 
        var $inp = $('input', tr);
        return 
            project: $inp.eq(0).val(),
            client: $inp.eq(1).val(),
            rate: $inp.eq(2).val(),
        ;
    );
    $('#jsonout').text(JSON.stringify(data, null, 2));    
);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="project-table" class="table table-striped table-hover">
    <thead>
    <tr>
        <th>Project Name</th>
        <th>Client Name</th>
        <th>Field Rate</th>
        <th>Delete Row</th>
    </tr>
    </thead>
    <tbody>
    </tbody>
</table>
<button type="button" onclick="projectTable()" class="btn btn-primary">Add Row</button>
<button type="button" id="get" class="btn btn-primary">Get JSON</button>
<pre id="jsonout"></pre>

【讨论】:

我需要 Id 和版本来更新对象。有没有更好的方法来处理这种事情? 是的,您可以将data- 属性放在tr 元素上。 我最终选择了一条不同的路线,但确实发现这是一个有用的起点。感谢您的帮助。

以上是关于遍历表并在 js/jquery 中创建一个数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JSF 中创建选择列表?尝试使用 JS/jQuery 移动项目,但使用“验证错误:值无效”提交错误

遍历文档 uid 列表并在 Firestore 中创建侦听器

循环链表并在C中的末尾函数插入

如何简单实用hammer

在一个函数中创建一个数组并在另一个函数中读取它,而不需要返回语句

循环遍历数组以在反应路由器中创建路由