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

    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();
    }
    Ответ написан
    Комментировать
  • Какие есть способы сократить данную строку?

    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')) {
    Ответ написан
    Комментировать