如何使用jquery在循环中查找和替换

How to find and replace in loop with jquery

本文关键字:查找 替换 循环 何使用 jquery      更新时间:2023-09-26

我在这里做了一些搜索,但找不到确切的答案来解决这个问题。我目前有一个动态div,在表单中添加了select元素。输入名称被放置为数组,这些div也可以动态删除。我需要找到一种方法,当用户删除这个div时,下面的div和输入就会被重命名。我希望这是有道理的。以下是用户删除包含输入字段的div后发生的情况的示例:

<div class="rooms" id="row1">
  <input type="text" name="room[1][adults]">
  <input type="text" name="room[1][children]">
</div>
<div class="rooms" id="row3">
  <input type="text" name="room[3][adults]">
  <input type="text" name="room[3][children]">
</div>

我需要能够循环浏览.roomsdiv,并在输入的name属性上查找和替换数字元素。因此,需要将room[3][adults]更改为room[2][adults]。循环运行时,一次最多可以有八个div。这是我的一个想法,但我不知道如何替换中间的一个数字。

var i = 1;
$(".rooms").each(function () {
  var thisId = $(this).attr('id');
  var numToFind = thisId.substr(thisId.length - 1);
  $("#"+thisId).find("select[name='room["+numToFind+"][adults]']").replace( 'room["+numToFind+"][adults]','room["+i+"][adults]');
  $("#"+thisId).find("select[name='room["+numToFind+"][children]']").replace( 'room["+numToFind+"][children]','room["+i+"][children]');
  i = i + 1;
});

所以这几乎是我所能想到的,任何帮助实现这一点的人都将不胜感激!

存在多个问题

  • find()返回一个没有replace()方法的jQuery对象
  • 仅仅使用replace是不够的,您需要获取名称、替换内容并将其设置回

你可以使用一个简单的迭代,一个像一样的替换

var i = 1;
$(".rooms").each(function() {
  $(this).find('input[name^=room]').attr('name', function(idx, name) {
    return name.replace(/'['d+']/, '[' + i + ']');
  });
  i++;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="rooms" id="row1">
  <input type="text" name="room[1][adults]">
  <input type="text" name="room[1][children]">
</div>
<div class="rooms" id="row3">
  <input type="text" name="room[3][adults]">
  <input type="text" name="room[3][children]">
</div>
<div class="rooms" id="row3">
  <input type="text" name="room[3][adults]">
  <input type="text" name="room[3][children]">
</div>
<div class="rooms" id="row3">
  <input type="text" name="room[3][adults]">
  <input type="text" name="room[3][children]">
</div>