Должен быть лучший способ установить переменную $ callLinkContainer в следующем блоке кода:
var $callLinkContainer;
if ( $callLink.closest('class1-tel').length > 0 ) {
$callLinkContainer = $('body').find('.class1-container');
} else if ( $callLink.closest('.class2').length > 0 ) {
$callLinkContainer = $('body').find('.class2-container');
} else {
$callLinkContainer = $callLink.closest('.class3');
}
Раньше я использовал тернарный оператор для установки переменной, но я уверен, что третье условие делает невозможным. Я хотел бы сделать этот код более кратким, если это возможно.
Вы можете вложить условные операторы. Код короче и с соответствующими разрывами строк и отступом он читается как инструкции if
.
$callLinkContainer = $callLink.closest('class1-tel').length ?
$('.class1-container') :
($callLink.closest('.class2').length ?
$('.class2-container') :
$callLink.closest('.class3'));
> 0
с
Вы можете использовать несколько тернарных операторов с отступом
var $callLinkContainer = $callLink.closest('class1-tel').length > 0
? $('body').find('.class1-container')
: $callLink.closest('.class2').length > 0
? $('body').find('.class2-container')
: $callLink.closest('.class3');
Приоритет операторов заключается в том, что вам не нужно добавлять скобки, как в
a ? b : (c ? d : e)
Однако вы можете добавить их для большей ясности.
Я хотел бы сделать следующее предложение
Инкапсулировать код в несколько функций
function isCallLinkClosest(var callLinkSelector){
return $callLink.closest(callLinkSelector).length > 0;
}
function getCallLinkContainer(var containerSelector){
return $('body').find(containerSelector);
}
function getDataAttributeByClass(){
if ( isCallLinkClosest('class1-tel')) {
return getCallLinkContainer('.class1-container');
} else if ( isCallLinkClosest('.class2')) {
return getCallLinkContainer('.class2-container');
} else {
return $callLink.closest('.class3');
}
}
Это лучшее предложение, которое я могу сделать с данной информацией :)
.class1-tel
ли .class1-tel
, .class2
или .class3
одновременно?
Если нет, то вы можете сделать что-то вроде этого:
var $callLinkContainer = ($callLink.closest('.class1-tel, .class2').length
? $('body').find('.class1-container, .class2-container')
: $callLink.closest('.class3'));
Если вы можете быть более конкретными в отношении имен классов и структуры dom, код может быть еще проще.
$('body').find(...)
в первых двух назначениях?