我已经克隆了一个选择器,但是在输出它之前,我希望用data_number + 1替换data_number的所有实例,但是我遇到了麻烦。
有人能告诉我我哪里做错了吗?谢谢。
var data_number = $('.data-fields').length, // The number of data rows
data_row = $('.data-'+data_number), // The last data row
new_data_row = data_row.clone(); // A clone of the last data row
/** Replace all instances of the data_number with data_number + 1 */
???
/** Clear all of the input values in the clone */
$('input[type="text"]', new_data_row).val('');
/** Output the now clean cloned data row */
data_row.after(new_data_row);例如,如果new_data_row最初是-
<div class="data-5">
<input name="data[5][label]" />
<input name="data[5][budget]" />
</div>我希望它能改成-
<div class="data-6">
<input name="data[6][label]" />
<input name="data[6][budget]" />
</div>发布于 2012-11-21 00:23:48
又快又脏。DOM --> html --> replace --> DOM。
var data_number = $('.data-fields').length, // The number of data rows
data_row = $('.data-'+data_number), // The last data row
cloned_data = data_row.clone(),
new_data_row, // Raw html
next_number = data_number + 1;
cloned_data.find("input").val(""); //Clear inputs
new_data_row = cloned_data.wrap("<div/>").parent().html().replace(new RegExp(data_number + "", "gm"), next_number + "");
/** Output the now clean cloned data row */
data_row.after(new_data_row);发布于 2012-11-21 00:19:39
您需要使用string replace,并且您的data_number + 1需要为parseInt(data_number) + 1,除非您想在字符串的末尾添加1。
发布于 2012-11-21 01:11:14
好了,这里的答案比我预想的要长。
此外,这只是因为我手动替换了我知道需要替换的所有元素,所以如果有任何更好的方法,请分享。
更新
我已经接受了另一个答案,因为它完全达到了我想要的效果,所以尽管这段代码可以工作,但我还是推荐这样做。
$(document).ready(function(){
var link = $('.add-data-link');
link.on('click', function(){
var data_number = $('.data-fields').length, // The number of data rows
next_number = data_number + 1, // The next data number
data_row = $('.data-'+data_number), // The last data row
new_data_row = data_row.clone(), // A clone of the last data row
class_name = 'data-'+data_number, // The class of the cloned data
new_class_name = 'data-'+next_number; // The new class that will replace the cloned data
/** Replace all instances of the 'data_number' with 'next_number' */
var for_text, name_text;
$(new_data_row).removeClass(class_name).addClass(new_class_name);
$('label', new_data_row).each(function(){
for_text = $(this).attr('for');
for_text = for_text.replace(data_number, next_number);
$(this).attr('for', for_text);
});
$('input', new_data_row).each(function(){
name_text = $(this).attr('name');
name_text = name_text.replace(data_number, next_number);
$(this).attr('name', name_text);
});
/** Clear all of the input values in the clone */
$('input[type="text"]', new_data_row).attr('value', '');
/** Output the now clean cloned data row */
data_row.after(new_data_row);
});
});https://stackoverflow.com/questions/13477235
复制相似问题