简体   繁体   English

如何使用jQuery向表中添加新行,并为其增加增量ID

[英]How to use jQuery to add a new row to a table, and assgin an incrementing id to it

I have an existing HTML table, part of a form where the user enters GPS points. 我有一个现有的HTML表,这是用户输入GPS点的表单的一部分。 The user also has the option to upload GPS data points. 用户还可以选择上传GPS数据点。 I'd like to have a button the user can press where some Javascript will add one or more new rows to the table, but the new row(s) must continue incrementing the name and id values used in the table. 我希望有一个按钮,用户可以按一下某个Javascript将在其中向表中添加一个或多个新行的位置,但是新行必须继续增加表中使用的名称和ID值。 Eg if the last row had a name="x5", the newly inserted row should have name="x6" etc. 例如,如果最后一行具有名称=“ x5”,则新插入的行应具有名称=“ x6”,以此类推。

Sequence XY 顺序XY

 </thead>

 <tbody>

    <tr>
            <td class="zSmall" style="text-align: right;"><div class="StdTableData">1</div></td>
            <td class="zSmall"><div class="StdTableData"><input type="text" name="x1" id="x1" size="8" maxlength="16" value="38.0"/></div></td>
            <td class="zSmall"><div class="StdTableData"><input type="text" name="y1" id="y1" size="8" maxlength="16" value="-122.0"/></div></td>
    </tr>

    <tr>

            <td class="zSmall" style="text-align: right;"><div class="StdTableData">2</div></td>
            <td class="zSmall"><div class="StdTableData"><input type="text" name="x2" id="x2" size="8" maxlength="16" value="38.2"/></div></td>
            <td class="zSmall"><div class="StdTableData"><input type="text" name="y2" id="y2" size="8" maxlength="16" value="-122.2"/></div></td>
    </tr>

    <tr>
            <td class="zSmall" style="text-align: right;"><div class="StdTableData">3</div></td>
            <td class="zSmall"><div class="StdTableData"><input type="text" name="x3" id="x3" size="8" maxlength="16" value="38.3"/></div></td>
            <td class="zSmall"><div class="StdTableData"><input type="text" name="y3" id="y3" size="8" maxlength="16" value="-122.4"/></div></td>

    </tr>

    <tr>
            <td class="zSmall" style="text-align: right;"><div class="StdTableData">4</div></td>
            <td class="zSmall"><div class="StdTableData"><input type="text" name="x4" id="x4" size="8" maxlength="16" value="38.1"/></div></td>
            <td class="zSmall"><div class="StdTableData"><input type="text" name="y4" id="y4" size="8" maxlength="16" value="-122.1"/></div></td>
    </tr>

    <tr>
            <td class="zSmall" style="text-align: right;"><div class="StdTableData">5</div></td>

            <td class="zSmall"><div class="StdTableData"><input type="text" name="x5" id="x5" size="8" maxlength="16" value="38.9"/></div></td>
            <td class="zSmall"><div class="StdTableData"><input type="text" name="y5" id="y5" size="8" maxlength="16" value="-123.0"/></div></td>
    </tr>

 </tbody>

Why use Jason's perfectly sensible solution when you could use an over-engineered version? 当您可以使用过度设计的版本时,为什么还要使用Jason的完全明智的解决方案

;o) ; O)

function addRow() {
    var $newRow = $('#gpsTable tbody tr:last-child').clone();
    var newid = $newRow.children().eq(1).find('.StdTableData input').attr('id').match(/\d+/);
    newid = parseInt(newid[0]) + 1;
    var newXid = 'x' + newid;
    var newYid = 'y' + newid;

    $newRow.children().eq(0).find('.StdTableData').text(newid);
    $newRow.children().eq(1).find('.StdTableData input').attr({id:newXid,name:newXid}).val('');
    $newRow.children().eq(2).find('.StdTableData input').attr({id:newYid,name:newYid}).val('');

    $('#gpsTable tbody').append($newRow);
}

Oh, and just in case you're not quite so familiar with jQuery, here's some code that will turn your Sequence text heading into a button you can click to add a row. 哦,以防万一您对jQuery不太熟悉,下面的一些代码会将您的Sequence文本标题变成一个按钮,您可以单击以添加一行。

$(document).ready(function() {  
    $('th:first').click(function() {
        addRow();
    });
});

A partial solution to your problem (if you don't want to parse ids) could be to create a hidden input to store the last numeric portion of your ID value which you could use to increment your table ID while incrementing the hidden input value as well. 对于您的问题的部分解决方案(如果您不想解析ID)可能是创建一个隐藏的输入来存储ID值的最后一个数字部分,您可以使用该数字部分来增加表ID,同时将隐藏的输入值增加为好。 As for inserting a table line, that's pretty straightforward JS. 至于插入表格行,这是非常简单的JS。 Create your tr element, create your td elements, populate them, append to your tr, append tr to table. 创建您的tr元素,创建您的td元素,填充它们,将其追加到tr,将tr追加到表。 Done. 完成。

This should work for adding a single row. 这应该适用于添加单行。 You could wrap it in some sort of loop to add multiple: 您可以将其包装在某种循环中以添加多个:

function AddRow(xValue,yValue)
{
var index = $("#gpsTable tr:last td:first").text();
var newIndex = parseInt(index) + 1;
var rowHtml = '<tr><td class="zSmall" style="text-align: right;"><div class="StdTableData">' + newIndex + '</div></td>';
rowHtml += '<td class="zSmall"><div class="StdTableData"><input type="text" name="x' + newIndex + '" id="x' + newIndex + '" size="8" maxlength="16" value="' + xValue + '"/></div></td>';
rowHtml += '<td class="zSmall"><div class="StdTableData"><input type="text" name="y' + newIndex + '" id="y' + newIndex + '" size="8" maxlength="16" value="' + yValue + '"/></div></td></tr>';

$("#gpsTable tr:last").after(rowHtml);
return false;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM