2016-03-23 3 views
0

Я сделал несколько поисков здесь и не могу найти точный ответ, чтобы выяснить этот вопрос. В настоящее время у меня есть динамические div с элементами, добавленными в форму. Имена ввода помещаются как массив, эти div также могут быть удалены динамически. Мне нужно выяснить, что, когда пользователь удаляет этот div, divs и входные данные ниже переименовываются. Надеюсь, это имело смысл. Вот пример того, что происходит после того, как пользователь удаляет DIV, содержащий поля ввода:Как найти и заменить в цикле с помощью jquery

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

Мне нужно, чтобы быть в состоянии петли через .rooms дивы найти и заменить числовой элемент на Имя свойства вход. Поэтому room[3][adults] необходимо изменить на room[2][adults]. В то время, когда цикл работает, может быть до восьми разделов. Вот что я имел в виду, но я не могу понять, как заменить это одно число между ними.

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

Так что это почти все, что я мог придумать, любая помощь при выполнении этого была бы очень признательна!

+0

у вас есть проблема конкатенации. –

ответ

1

Есть несколько вопросов

  • find() возвращает объект JQuery, который не имеет replace() метод
  • Только с помощью 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>

+0

Я знал, что есть простое решение! Спасибо, после программирования на 12 часов подряд, мозг становится mush lol. – lov2code

Смежные вопросы