jQuery获取前一行的输入数组键值

时间:2017-03-03 14:26:18

标签: jquery

我在我的视图中有这个表,我可以在该表中添加一个新行:

<table id="t1">
  <tr>
    <th>Item</th>
    <th>Quantity</th>
  </tr>
  <tr id="r1">
    <td><input name="item[0][]" type="text"/></td>
    <td><input name="quantity[0][]" type="number"/></td>
    <td><button class="deleteRow">X</button></td>
  </tr>
</table>
<button id="addRow">Add Row</button>

.jQuery

$(document).on('click', '#addRow', function(){
    var row = parseInt($('#t1 tr:last-child').attr('id').replace(/[^\d]/g, ''), 10) + 1;
        $('#t1').append('<tr id="r'+row+'"><td><input name="item[][]" type="text"/></td><td><input name="quantity[][]" type="number"/></td><td><button class="deleteRow">X</button></td></tr>');
});

$(document).on('click', '.deleteRow', function(){
        var row = parseInt($(this).closest('tr').attr('id').replace(/[^\d]/g, ''), 10);

    if (row > 1) {
            $('#r'+row).remove();
        $('#t1 tr:gt(0)').attr('id',function(i,o){
           return "r"+ (i+1);
        });
        }
});

FIDDLE

但是当我添加一个新行时,我想获得前一行的第一个键[this_one] []

<td><input name="item[this_one][]" type="text"/></td>

我希望你理解我的意思。

那么如何在第一个括号/第一个键内获取值?

更新

所以当添加一个新行时,我需要这样的变量:

$(document).on('click', '#addRow', function(){
    var row = parseInt($('#t1 tr:last-child').attr('id').replace(/[^\d]/g, ''), 10) + 1;
    var first_key = ?????

        $('#t1').append('<tr id="r'+row+'"><td><input name="item['+first_key+'][]" type="text"/></td><td><input name="quantity['+first_key+'][]" type="number"/></td><td><button class="deleteRow">X</button></td></tr>');
});

2 个答案:

答案 0 :(得分:1)

了解我如何添加['+(row - 1)+'],因为您已在计算row以更新id

$(document).on('click', '#addRow', function(){
  var row = parseInt($('#t1 tr:last-child').attr('id').replace(/[^\d]/g, ''), 10) + 1;
  $('#t1').append('<tr id="r'+row+'"><td><input name="item['+(row - 1)+'][]" type="text"/></td><td><input name="quantity['+(row - 1)+'][]" type="number"/></td><td><button class="deleteRow">X</button></td></tr>');
});

$(document).on('click', '.deleteRow', function(){
  var row = parseInt($(this).closest('tr').attr('id').replace(/[^\d]/g, ''), 10);

  if (row > 1) {
      $('#r'+row).remove();
      $('#t1 tr:gt(0)').attr('id',function(i,o){
         return "r"+ (i+1);
      });
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="t1">
<tr>
  <th>Item</th>
  <th>Quantity</th>
</tr>
<tr id="r1">
  <td><input name="item[0][]" type="text"/></td>
  <td><input name="quantity[0][]" type="number"/></td>
  <td><button class="deleteRow">X</button></td>
</tr>
</table>
<button id="addRow">Add Row</button>

聊天讨论后更新 因此OP需要获得值“this_one”,正如他在问题中实际解释的那样。 So this fiddle was the solution he was looking for

答案 1 :(得分:0)

这个怎么样? var first_key = $('#t1 tr:last-child > td:first-child > input').attr("name"); var startPosition = first_key.indexOf("["); var endPosition = first_key.indexOf("]"); var subStringName = first_key.substring(startPosition+1,endPosition);

Var substringName将保存您要查找的值。 通过使用正则表达式而不是startposition和endPosition可以进一步改善这一点。我不是很擅长正则表达式因此尝试通过javascript函数完成所有工作。