Я клонирую набор полей и увеличиваю имена атрибутов при создании нового клона. Однако я хочу, чтобы то же самое происходило, если я удаляю клонирование, чтобы любой клонированный набор полей после удаленного заполнял пробелы. Например, если 2-й клон удален, 3-й будет переименован в 2-й и т. Д.
Я пытаюсь изменить классы и идентификаторы, которые заканчиваются на «_3», чтобы заканчиваться на «_2» (или аналогично, меняя классы и идентификаторы, заканчивающиеся на «_2», заканчивающиеся на «_1»). В настоящее время я использую jQuery для изменения каждого конкретного класса или идентификатора в отдельности, и я просто думаю, что должен быть более эффективный способ их поиска, отфильтровывая подчеркивающую часть имени класса или идентификатора и определяя, что нужно изменить. к.
Мой HTML-код, который клонируется:
<fieldset class="basic_info">
<h3 class="title_0">About You </h3>
<div class="details">
<a class="delete driver_0" href="javascript:void(0);">Delete this driver</a>
<div class="proposer dob">
<label for="dob_0">Date of Birth</label><input type="text" name="dob_0" id="dob_0" /><span>Example: 30/07/1980</span>
</div>
<div class="proposer gender">
<span class="gender">Gender</span>
<input type="radio" name="gender_0" id="female_0" value="female" />
<label for="female_0">Female</label>
</div>
<div class="proposer gender">
<span class="invisible"> </span>
<input type="radio" name="gender_0" id="male_0" value="male" />
<label for="male_0">Male</label>
</div>
<div class="proposer license_type">
<label for="license_type_0">License Type</label><select name="license_type_0" id="license_type_0"><option id="0">Please Select ...</option><option id="hide">Provisional</option><option id="show1">Full EU</option><option id="show2">Full Irish</option></select>
</div>
<div class="license_age_0 opt_show1 opt_show2">
<div>
<span>How long have you had your full license?</span>
<input type="radio" name="license_age_0" id="plus_five_yrs_0" value="female" />
<label for="plus_five_yrs_0">More than 5 Years</label>
</div>
<div>
<span class="invisible"> </span>
<input type="radio" name="license_age_0" id="lessthan_five_yrs_0" value="male" />
<label for="lessthan_five_yrs_0">Less than 5 Years</label>
</div>
</div>
</div>
</fieldset>
Вот мой код jquery для переименования после удаления:
$('.delete').live('click', function() {
if($(this).hasClass('driver_1')){
$('<h3 class="title_1">Driver 1</h3>').replaceAll('.title_2');
$('<h3 class="title_2">Driver 2</h3>').replaceAll('.title_3');
$(".driver_2").addClass("driver_1").removeClass("driver_2");
$(".driver_3").addClass("driver_2").removeClass("driver_3");
$("#dob_2").attr("id","dob_1");
$("#dob_3").attr("id","dob_2");
$('label[for="dob_2"]').attr("for","dob_1");
$('label[for="dob_3"]').attr("for","dob_2");
$('label[for="female_2"]').attr("for","female_1");
$('label[for="female_3"]').attr("for","female_2");
$('label[for="male_2"]').attr("for","male_1");
$('label[for="male_3"]').attr("for","male_2");
$('label[for="license_type_2"]').attr("for","license_type_1");
$('label[for="license_type_3"]').attr("for","license_type_2");
$('label[for="plus_five_yrs_2"]').attr("for","plus_five_yrs_1");
$('label[for="plus_five_yrs_3"]').attr("for","plus_five_yrs_2");
$('label[for="lessthan_five_yrs_2"]').attr("for","lessthan_five_yrs_1");
$('label[for="lessthan_five_yrs_3"]').attr("for","lessthan_five_yrs_2");
$("#female_2").attr("id","female_1").attr("name","gender_1");
$("#female_3").attr("id","female_2").attr("name","gender_2");
$("#male_2").attr("id","male_1").attr("name","gender_1");
$("#male_3").attr("id","male_2").attr("name","gender_2");
$("#gender_2").attr("id","gender_1").attr("name","gender_1");
$("#gender_3").attr("id","gender_2").attr("name","gender_2");
$("#licence_type_2").attr("id","licence_type_1");
$("#licence_type_3").attr("id","licence_type_2");
$("#plus_five_yrs_2").attr("id","plus_five_yrs_1");
$("#plus_five_yrs_3").attr("id","plus_five_yrs_2");
$("#lessthan_five_yrs_2").attr("id","lessthan_five_yrs_1");
$("#lessthan_five_yrs_3").attr("id","lessthan_five_yrs_2");
}
if($(this).hasClass('driver_2')){
$('<h3 class="title_2" style="-moz-border-radius-topleft: 7px; -moz-border-radius-topright: 7px;">Driver 2</h3>').replaceAll('.title_3');
$(".driver_3").addClass("driver_2").removeClass("driver_3");
$("#dob_3").attr("id","dob_2");
$('label[for="dob_3"]').attr("for","dob_2");
$('label[for="female_3"]').attr("for","female_2");
$('label[for="male_3"]').attr("for","male_2");
$('label[for="license_type_3"]').attr("for","license_type_2");
$('label[for="plus_five_yrs_3"]').attr("for","plus_five_yrs_2");
$('label[for="lessthan_five_yrs_3"]').attr("for","lessthan_five_yrs_2");
$("#female_3").attr("id","female_2").attr("name","gender_2");
$("#male_3").attr("id","male_2").attr("name","gender_2");
$("#gender_3").attr("id","gender_2").attr("name","gender_2");
$("#licence_type_3").attr("id","licence_type_2").attr("name","licence_type_2");
$("#plus_five_yrs_3").attr("id","plus_five_yrs_2").attr("name","license_age_2");
$("#lessthan_five_yrs_3").attr("id","lessthan_five_yrs_2").attr("name","license_age_2");
}
$(this).parent().parent('.additional_driver').remove();
$('#clonetrigger').show();
$('h3').corner("7px tl tr");
return false;
});
}
};
Кто-нибудь сможет помочь мне направить меня в правильном направлении. Я думаю, что подход к этому опасен, так как любые изменения в html означают, что эти изменения должны быть отражены в приведенном выше коде jquery, оставляя много места для ошибок.
Спасибо,
али
Обновление:
Исходя из предложения ниже, я думаю, что я почти на месте, хотя я не думаю, что мой синтаксис правильный (см. Комментарии к коду):
$('.delete').live('click', function() {
if($(this).hasClass('driver_1')){
var id_1 = $("[id$=_1]").attr("id"); // THIS WORKS PERFECTLY
var class_1 = $("[class$=_1]").attr("class"); // THIS WORKS PERFECTLY
var for_1 = $("[for$=_1]").attr("for"); // THIS WORKS PERFECTLY
var name_1 = $("[name$=_2]").attr("name"); // THIS WORKS PERFECTLY
var id_2 = $("[id$=_2]").attr("id"); // THIS WORKS PERFECTLY
var class_2 = $("[class$=_2]").attr("class"); // THIS WORKS PERFECTLY
var for_2 = $("[for$=_2]").attr("for"); // THIS WORKS PERFECTLY
var name_2 = $("[name$=_2]").attr("name");// THIS WORKS PERFECTLY
var id_3 = $("[id$=_3]").attr("id"); // THIS WORKS PERFECTLY
var class_3 = $("[class$=_3]").attr("class"); // THIS WORKS PERFECTLY
var for_3 = $("[for$=_3").attr("for"); // THIS WORKS PERFECTLY
var name_3 = $("[name$=_3]").attr("name"); // THIS WORKS PERFECTLY
$(fieldclone).find(id_2).each(function(){
("id_2").replaceWith.("id_1"); // THIS LINE ISN'T EXECUTING
});
$(fieldclone).find(id_3).each(function(){
("id_3").replaceWith.("id_2"); // THIS LINE ISN'T EXECUTING
});
}
Спасибо,
али