В моем приложении две вкладки: одна вкладка игрока, а другая вкладка тренировки. У меня есть function1 на вкладке игрока и function2 на вкладке тренировки.
function1
var beforeList = $('#players').val()
$('#players').change(function () {
var afterList = $(this).val()
var selectedPlayer = ''
if (!beforeList) {
selectedPlayer = afterList[0]
$('parent option[value=' + selectedPlayer + ']').add()
$('#injuredPlayer option[value=' + selectedPlayer + ']').add()
} else if (!afterList) {
selectedPlayer = beforeList[0]
$('parent option[value=' + selectedPlayer + ']').remove()
$('#injuredPlayer option[value=' + selectedPlayer + ']').remove()
} else if (beforeList.length > afterList.length) {
selectedPlayer = getselectedPlayer(beforeList, afterList)
$('parent option[value=' + selectedPlayer + ']').remove()
$('#injuredPlayer option[value=' + selectedPlayer + ']').remove()
} else if (beforeList.length < afterList.length) {
selectedPlayer = getselectedPlayer(afterList, beforeList)
$('parent option[value=' + selectedPlayer + ']').add()
$('#injuredPlayer option[value=' + selectedPlayer + ']').add()
}
if (afterList) {
for (var i = 0; i < afterList.length; i++) {
var optionInParentB = ($('#dad option[value=' + afterList[i] + ']').length > 0)
var optionInParentA = ($('#mom option[value=' + afterList[i] + ']').length > 0)
var optionInInjuredPlayer = ($('#injuredPlayer option[value=' + afterList[i] + ']').length > 0)
if (!optionInParentB) {
$('<option/>', {value: afterList[i], html: afterList[i]}).appendTo('#dad')
}
if (!optionInParentA) {
$('<option/>', {value: afterList[i], html: afterList[i]}).appendTo('#mom')
}
if (!optionInInjuredPlayer){
$('<option/>', {value: afterList[i], html: afterList[i]}).appendTo('#injuredPlayer')
}
}
} else {
$('#mom').empty()
$('#dad').empty()
$('#injuredPlayer').empty()
}
beforeList = afterList
})
function2
var beforeList = $('#coach').val()
$('#coach').change(function () {
var afterList = $(this).val()
var selectedCoach = ''
if (!beforeList) {
selectedCoach = afterList[0]
$('#injuredCoach option[value=' + selectedCoach + ']').add()
} else if (!afterList) {
selectedCoach = beforeList[0]
$('#injuredCoach option[value=' + selectedCoach + ']').remove()
} else if (beforeList.length > afterList.length) {
selectedCoach = getselectedCoach(beforeList, afterList)
$('#injuredCoach option[value=' + selectedCoach + ']').remove()
} else if (beforeList.length < afterList.length) {
selectedCoach = getselectedCoach(afterList, beforeList)
$('#injuredCoach option[value=' + selectedCoach + ']').add()
}
if (afterList) {
for (var i = 0; i < afterList.length; i++) {
var optionInInjuredCoach = ($('#injuredCoach option[value=' + afterList[i] + ']').length > 0)
if (!optionInInjuredCoach){
$('<option/>', {value: afterList[i], html: afterList[i]}).appendTo('#injuredCoach')
}
}
} else {
$('#injuredCoach').empty()
}
beforeList = afterList
})
Когда я смотрю на обе функции, я вижу, что они очень похоже, единственное отличие состоит в том, что вкладка игрока имеет родителей, а вкладка тренировки - нет. Мне было интересно, если функции в порядке, или они должны быть реорганизованы. Это плохая практика, если я просто оставлю их как есть? Если я хочу провести рефакторинг, я не был уверен, как сделать функцию generi c достаточно, чтобы учесть различия двух вкладок. Я хотел бы мысли и как я новичок в JS, пожалуйста, прости меня, если я ошибся.