• Почему не работает сортировка по цене?

    SnaIP
    @SnaIP
    Front-end разработчик
    у вас обработчик отрабатывает только 1 раз

    document.addEventListener("click", (e) => {
        // Используйте e.target 
        shop.sortProductsByPrice(Product.SORT_ORDER_ASC);
        shop.show();
    }, false);


    Если e.target === (вашей ячейки) то перерисовывать таблицу и делать сортировку, дальше думаю разберетесь
    Ответ написан
    6 комментариев
  • Как получить значение класса элемента?

    SnaIP
    @SnaIP
    Front-end разработчик
    <table>  <tr role="row" class="odd" id="myList"> 
      <td width="10%">1152012985</td>
      <td width="13%">22:02:34</td>
      <td width="12%"><img src="/images/cur_DOGE.png" width="18px" height="18px"><span>DOGE</span></td>
      <td width="18%"><a class="nick">rijiy</a></td>
      <td width="13%">0.006</td>
      <td width="11%">&lt;48</td>
      <td width="10%">39.8071</td>
      <td width="13%" class="green">+0.00600000</td>
      </tr> </table>


    let cellsCount = document.getElementsByTagName('table')[0].rows[0].cells.length-1 // посчитать количество ячеек
    document.getElementsByTagName('td')[cellsCount] // вернет элемент с последним индексом
    Ответ написан
    2 комментария
  • Когда использовать методы в конструкторе, а когда - в прототипе?

    SnaIP
    @SnaIP
    Front-end разработчик
    Во первых при создание метода в конструкторе, вы переопределяете каждый раз его.
    Во вторых как говорилось выше, зачем вам для каждого объекта создавать свой метод, когда лучше обратится по цепочке прототипов к нему.

    Вот простой пример как лучше делать es5

    var root = document.getElementById('root');
    
    // наш конструктор
    function FabricButton(options) { 
        this.element = document.createElement('button');
        this.element.innerHTML = (typeof options.text == 'string') ? options.text : 'there had to be text';
        this.element.style.color = (typeof options.color == 'string') ? options.color : 'blue';
    }
    
    // выносим метод нашего класса в прототип, чтобы при создание не перезаписывать его
    FabricButton.prototype.render = function(root) {
      root.appendChild(this.element);
    }
    
    function FabricButtonPopup(options) { 
        FabricButton.call(this, options);
        this.element.addEventListener('click', this.popup);
    }
    
    // Здесь наследуем наш прототип, то есть сюда попадет {constructor: f, render: f} 
    FabricButtonPopup.prototype = Object.create(FabricButton.prototype);
    FabricButtonPopup.prototype.constructor = FabricButtonPopup; // переопределяем ссылку на наш конструктор
    
    FabricButtonPopup.prototype.popup = function() {
      prompt('open window')
    }
    
    var button = new FabricButton({
      text: 'press here',
      color: null
    })
    
    var buttonPopup = new FabricButtonPopup({
      text: 'press here man',
      color: 'red'
    })
    Ответ написан
    Комментировать
  • Как подсчитать ширину всех картинок?

    SnaIP
    @SnaIP
    Front-end разработчик
    Более универсальное решение

    window.onload = () => {
      let w = 0;
      $.each($('img'), (index, value) => {
        w += $(value).width()
      })
    };
    Ответ написан