Ответы пользователя по тегу JavaScript
  • Как спрятать "p", если в соседнем div присутствует ссылка с определенным классом?

    alvvi
    @alvvi
    export default apathy;
    let page = document.querySelector('.ays_quiz_results_page')
    let link = page.querySelector('.ays_score_message .calss_dalee')
    if (link) {
      page.querySelector('ays_restart_button_p').style.display = 'none'
    }
    Ответ написан
  • Почему постфиксный и префиксный инкременты выдают одно и то же значение?

    alvvi
    @alvvi
    export default apathy;
    Не понятно, почему вы ожидаете именно разное поведение. Один оператор отличается от другого только возвращаемым значением. Возвращаемое значение в последнем выражении цикла for не влияет на выполнение цикла. Никакой дополнительной магии в данном цикле в JS нет.
    Ответ написан
    3 комментария
  • Почему в конструкторе super вызывается с неочевидным контекстом?

    alvvi
    @alvvi
    export default apathy;
    Bar [[Prototype => Foo]] так обозначу объект которому вы не дали название, создающийся через new Bar();

    1. При первом вызове print в конструкторе Foo:
    - this ссылается на объект Bar [[Prototype => Foo]]
    - при вызове this.print() соотвественно идет поиск метода print в этом объекте
    - до прототипа мы не доходим, поскольку метод есть в объекте Bar и он уже определен даже до окончания вызова construct(!), вызываем метод
    - вызов super() еще не закончился, this.id установлен со значением 'foo' в строке выше до вызова метода print(), соотвественно на выходе получаем: 'bar foo'

    2. Вызов super() закончился. В свойство this.id нашего объекта записываем значение 'bar' в следующей строке.
    - Вызваем print в конструкторе Bar
    - JS ищет метод в объетке Bar [[Prototype => Foo]], опять находит его в самом объекте, до прототипа не доходим
    - На выходе получаем: 'bar bar'

    3. Последний вызов самое легкое. super.print() это то же самое что bar.prototype.print(). Систему поиска методов в объекте обходим, напрямую вызываем метод прототипа
    - this.id объекта установили на этапе 2, его последнее значение 'bar'
    - напоминаю, вызваем именно метод из прототипа, получаем 'foo bar'

    На самом деле все довольно прямолинейно конкретно в этом примере, если понимать протоипное наследование и то, что синтаксис классов лишь синтаксический сахар скрывающий функции-конструкторы с установкой прототипов.

    Подробнее почитать тут: https://learn.javascript.ru/prototypes
    Про особенности super: https://learn.javascript.ru/class-inheritance
    Ответ написан
  • Указание переменных через window?

    alvvi
    @alvvi
    export default apathy;
    Вызовы типа
    window.property = 'string'
    window.function = () => 'hey there'

    это по сути объявление глобальных переменных, которые будут доступны всем скриптам. Используется на практике в случае, где данные операции/свойства необходимо объявить на сервере.

    Например, таким образом можно записать в объект window свойство с каким-нибудь JSON-конфигом из PHP или другого серверного языка или просто передать информацию из серверного языка в качестве переменной.

    Использовать такой подход для объявления переменных в остальных случаях крайне не рекомендуется. В данном случае преподователь вам дает скорее вредный нежели полезный пример, подобный код можно написать без глобальных переменных/свойств глобального объекта.
    Ответ написан
    Комментировать
  • Как в библиотеке select2 сделать фильтр для поля поиска?

    alvvi
    @alvvi
    export default apathy;
    Функцию поиска можно кастомизировать: https://select2.org/searching
    Думаю написать функцию которая исключает из строки часть за скобкой не составит труда.

    Для референса, вот https://github.com/select2/select2/blob/develop/sr... тут можно найти дефолтную функцию matcher.
    Ответ написан
    Комментировать
  • Как вывести элемент массива у которого id соответствует дата атрибуту кнопки?

    alvvi
    @alvvi
    export default apathy;
    function watchAboutProduct(){
      let id1 = $(this).attr('product-id');
      let product = breadProduct.find(product => product["id"] === id1);
    }

    А лучше breadProduct превратить в объект в котором ключи будут id-шниками. Если продуктов ожидается много и искать придется часто. Тогда поиск упростится до breadProduct[id1].
    Ответ написан
    1 комментарий
  • Как убрать из кэша часть кода php?

    alvvi
    @alvvi
    export default apathy;
    По сути ничего не мешает вам передалать этот код в JS.
    Делаете POST из JS, в <?php echo $views; ?> ставите плейсхолдер, помечаете каким-нибудь селктором. После того как POST отрабатывает вставляете туда нужное вам значение.

    Отдельный роут в WP который будет отдавать нужные вам данные можно делать через WP REST API или ajax-экшены.
    Ответ написан
    Комментировать
  • Задачка по js с обьектами,поможете?

    alvvi
    @alvvi
    export default apathy;
    function restoreNames(users) {
      users.forEach(user => {
          if (!user.firstName) {
            user.firstName = user.fullName.split(" ")[0];  
          }
      })
    }
    Ответ написан
    1 комментарий
  • Изменение функции при определенном брейкпоинте?

    alvvi
    @alvvi
    export default apathy;
    При значит при нем и только при нем?
    Довольно легко
    $(document).ready(function(){
      $('.scrollspy').scrollSpy({scrollOffset: window.innerWidth === 768 ? 150 : 100});
    });
    Ответ написан
  • Что такое встроенные "классы" в прототипном ООП JavaScript?

    alvvi
    @alvvi
    export default apathy;
    Конструкторы о которых говорится в учебнике можно получить очень просто:
    console.log(Object);
    Только вот увидите вы следующее:
    // ƒ Object() { [native code] }
    По сути встроенные классы - обычные функции-конструкторы, просто выполняются нативным кодом браузера + у них определны все необходимые методы в prototype. Про это как раз в учебнике и написано. Стоит прочитать там же про прототипное наследование, чтобы сложилась более полная картина.
    Ответ написан
    Комментировать
  • Как разделить ассоциативный массив на ключ, значение?

    alvvi
    @alvvi
    export default apathy;
    ассоциативный массив === объект? Если да, то
    const obj = { hello: 'world' }
    Object.keys(obj) // ['hello']
    Object.values(obj) // ['world']
    Ответ написан
    1 комментарий
  • Почему у созданных объектов нет методов от Object?

    alvvi
    @alvvi
    export default apathy;
    Потому что если посмотреть в консоль, станет понятно, что прототип обычных объектов - это не Object, а Object.prototype, Object же не является чьим либо прототипом, Ojbect - это нативный конструктор (то есть то что внутри него - нативный код браузера, не JS).

    Но если предположить что это все же JS, выглядело бы это как-то так:
    const objectPrototype = {
      toString: () => 'string!'
      // и другие методы которые мы хотим иметь на всех объектах
    }
    
    function Object() { 
      /* здесь магия нативного кода */ 
    }
    Object.prototype = objectPrototype
    
    /*
    * Здесь мы по сути определяем "статический" метод, он будет доступен 
    * только на конструкторе Object и никогда не попадет
    * в Object.prototype, следовательно новые объекты его не унаследуют
    */
    Object.keys = obj => { 
      // делаем что-то и возвращаем ключи 
    }
    
    const obj = new Object()
    console.log(obj.__proto__) // {toString: ƒ}
    Ответ написан
    Комментировать
  • Почему при ресайзе не перестраивается текст?

    alvvi
    @alvvi
    export default apathy;
    Так вы ведь нигде текст не сохраняете, он попросту обрезается через вызов text.substr(0, i)
    и все, на странице его нет, как, вы предполагаете, он должен возвращаться?
    Ответ написан
    Комментировать
  • Можно ли динамически назначать сеттер объекту?

    alvvi
    @alvvi
    export default apathy;
    Object.defineProperty(obj, prop, descriptor)
    Это то что вам нужно, на сайте с докой есть пример:
    // Example of an object property added
    // with defineProperty with an accessor property descriptor
    var bValue = 38;
    Object.defineProperty(o, 'b', {
      // Using shorthand method names (ES2015 feature).
      // This is equivalent to:
      // get: function() { return bValue; },
      // set: function(newValue) { bValue = newValue; },
      get() { return bValue; },
      set(newValue) { bValue = newValue; },
      enumerable: true,
      configurable: true
    });

    Ссылка
    Ответ написан
    Комментировать
  • Куда записывать события по клику в ES6 javascript?

    alvvi
    @alvvi
    export default apathy;
    НАПРИМЕР вот как событие по клику реализовано в стандарте ES5

    ES5 тут не при чем, это синтаксис jQuery
    в ES5/ES6 на DOM-ивенты подписываются методом
    target.addEventListener(type, listener[, options]);

    где type - тип ивента,
    target - объект реализующий EventTarget интерфейс (например Element),
    listener - коллбэк который вызывается после ивента.
    Ответ написан
    1 комментарий
  • Как такое реализовать?

    alvvi
    @alvvi
    export default apathy;
    Можно и без jQuery, на CSS сделать.
    Но если надо именно с jQuery:
    $('[data-raiting]').each(function(i, el) {
      var $el = $(el)
      var raiting = $el.data('raiting')
      var $icons = $el.find('.stars i')
      // дальше берем нужное количество элементов и добавляем класс/красим 
      // через style
      $icons.slice(0, raiting + 1).addClass('star--filled')
    })


    .star--filled {
      color: yellow;
    }
    Ответ написан
    Комментировать
  • Вложенность в ES6?

    alvvi
    @alvvi
    export default apathy;
    Не ясно зачем вам вообще сеттер в таком случае.
    Было бы понятно, если бы ваш вызов был таким
    throwExc.parse = {bool: true, type: null}
    а ожидалось бы изменение свойства
    throwExc.parse.ElementName
    но так как вы напрямую обращаетесь к ElementName имеет смысл... обращаться к нему напрямую
    e.g.
    throwExc._parse.ElementName = {bool: true, type: null}

    Если необходимо чтобы ElementName вызвался именно сеттером, то _parse должен содержать объект с сеттером ElemntName или инстанс класса с сетером ElementName.
    Ответ написан
  • Как проверить существование элемента на странице?

    alvvi
    @alvvi
    export default apathy;
    const ref = querySelector('selector')
    document.body.contains(ref) // true
    ref.remove()
    document.body.contains(ref) // false

    Ну впрочем contains есть у любого нода, не только document.body
    Ответ написан
    Комментировать
  • Какой webpack loader использовать для загрузки css?

    alvvi
    @alvvi
    export default apathy;
    Попробуйте убрать
    exclude: /node_modules/
    вы ведь CSS из node_modules пытаетесь в бандл импортировать.
    Ответ написан
    Комментировать
  • В какой последовательности изучать JavaScript?

    alvvi
    @alvvi
    export default apathy;
    Нет, скорее
    JavaScript > Node.js (база) > Gulp/Webpack > Angular/Vue.js/React.js
    для фронтенда.
    Ответ написан
    Комментировать