Я ищу некоторую помощь по написанию кода для сокращения избыточного кода при сохранении ясности.Refactor Select Elements Соответствующий список значений
Учитывая этот HTML (значительно упрощенным от реальной вещи):
<div>
<fieldset>
<legend>Select Day for Code <span class="typeCode">089</span></legend>
<select name="date1" id="date1" class="dateSelect">
<option value="Mon">Monday</option>
<option value="Tue">Tuesday</option>
<option value="Wed">Wednesday</option>
<option value="Thu">Thursday</option>
<option value="Fri">Friday</option>
</select>
</fieldset>
<fieldset>
<legend>Select Day for Code <span class="typeCode">087</span></legend>
<select name="date2" id="date2" class="dateSelect">
<option value="Mon">Monday</option>
<option value="Tue">Tuesday</option>
<option value="Wed">Wednesday</option>
<option value="Thu">Thursday</option>
<option value="Fri">Friday</option>
</select>
</fieldset>
</div>
Я хотел увидеть, в какие дни были отобраны для конкретных кодов. Использование JQuery, я мог бы использовать что-то вроде этого:
$(
"div fieldset:has(.typeCode):contains(061) .dateSelect option:selected," +
"div fieldset:has(.typeCode):contains(064) .dateSelect option:selected," +
"div fieldset:has(.typeCode):contains(065) .dateSelect option:selected", +
"div fieldset:has(.typeCode):contains(089) .dateSelect option:selected," +
"div fieldset:has(.typeCode):contains(090) .dateSelect option:selected"
).each(
function(index) {
doSomethingHere();
}
);
Тем не менее, кажется, что там должен быть способ, чтобы упростить этот селектор. Нечто подобное было бы хорошо, но это не представляется возможным:
$(
"div fieldset:has(.typeCode):contains([061,064,065,089,090]) .dateSelect option:selected"
).each(
function(index) {
doSomethingHere();
}
);
Все, что я могу придумать что-то вроде этого:
var typeCodes = ["061", "064", "065", "089", "090"];
$("div fieldset:has(.typeCode)").each(
function(index) {
var code = $(this).find(".typeCode").text();
if ($.inArray(code, typeCodes) > -1) {
var dateSelected = $(this).find(".dateSelect option:selected");
doSomethingHere();
}
}
);
Это исключает дублирование кода, но на стоимость уменьшенной ясности.
Есть ли лучший способ сделать что-то подобное?