@Acharist
Front-end developer

Какие есть способы сократить данную строку?

if( target.className != 'search' && target.className != 'search_input' && target.className != 'cancel_btn') {
	cancelSearch();
}
  • Вопрос задан
  • 264 просмотра
Решения вопроса 3
0xD34F
@0xD34F Куратор тега JavaScript
Сложить допустимые значения в массив, с помощью метода узнать, содержится ли в массиве проверяемое значение:

if (![ 'search', 'search_input', 'cancel_btn' ].includes(target.className)) {

Или, заменить длинное обращение к проверяемому значению коротким через создание дополнительной переменной или константы:

const t = target.className;
if (t !== 'search' && t !== 'search_input' && t !== 'cancel_btn') {

Или, принимая во внимание имена переменной и проверяемого свойства, можно предположить, что речь идёт об элементе. А значит, несколько строк можно заменить на одну - селектор, и проверять, соответствует ли элемент этому селектору (результат этой проверки, в отличие от предыдущих, будет корректен и в том случае, если у элемента более одного класса):

if (!target.matches('.search, .search_input, .cancel_btn')) {
Ответ написан
Комментировать
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
if( !/search|search_input|cancel_btn/i.test(target.className) ) cancelSearch();

UPD:
OR
!/search|search_input|cancel_btn/i.test(target.className) && cancelSearch();
Ответ написан
Комментировать
Negwereth
@Negwereth
lvivcss.com.ua
Если вот на 100% уверен, что className состоит из одного слова.
if(!['search', 'search_input', 'cancel_btn'].includes(target.className)) {
  cancelSearch();
}


UPD:
И bulletproof реализация если несколько классов на элементе

const allowedClasses = ['search', 'search_input', 'cancel_btn'];

if(![...target.classList].some(name => allowedClasses.includes(name))) {
  cancelSearch();
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы