Поэтому у меня есть список, который я клонирую, чтобы клонировать и добавлять новые записи для:
<li class="splashEntry" data-counter="0">
<select name="options[0][type]" class="textCtrl">...</select>
<select name="options[0][sort]" class="textCtrl">...</select>
</li>
Я закрываю поле, используя $('li.splashEntry').last().clone()
и получая значение счетчика с использованием .data('counter')
.
Теперь мой вопрос будет о том, что будет лучшим способом обновить поле счетчика данных и именами выбора в последующем создаваемом клоне? В идеале, клонированный элемент списка должен иметь увеличенный счетчик данных и выбирать имена. Таким образом, клонированное поле, которое будет добавлено к концу, должно быть:
<li class="splashEntry" data-counter="1">
<select name="options[1][type]" class="textCtrl">...</select>
<select name="options[1][sort]" class="textCtrl">...</select>
</li>
Затем, поскольку эта новая запись добавляется до конца; если я нажму кнопку, чтобы создать другой клон, он должен прочитать новый счетчик данных как 1
(вместо 0 в первой строке), а затем создать новый элемент списка, где все записи говорят 2
.
Какой был бы лучший способ достичь этого?
Попробуйте что-нибудь вроде
//cloned element
var $clone = $('li.splashEntry').last().clone(),
//find the new counter value using old one
counter = $clone.data('counter') + 1;
//update the data-counter attibute - used attribute instead of data because it gives a visual update on the dom
$clone.attr('data-counter', counter);
//update the name values
$clone.find('[name]').attr('name', function (_, name) {
return name.replace(/\[\d+\]/, '[' + counter + ']')
Демо: скрипка