@Acharist
Front-end developer

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

if( target.className != 'search' && target.className != 'search_input' && target.className != 'cancel_btn') {
	cancelSearch();
}
  • Вопрос задан
  • 251 просмотр
Решения вопроса 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') {
Ответ написан
Комментировать
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();
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы