1. JavaScript / Говнокод #14340

    +155

    1. 1
    2. 2
    $(element).width($(element).width());
    $(element).height($(element).height());

    Просто нет слов.

    Запостил: Diwms, 10 Января 2014

    Комментарии (23) RSS

    • А вдруг?
      Ответить
    • Подёргивание. Уж не помню, файрятся ли какие-то события на width() в jquery, но с ExtJS подобное видел. Плохая практика, конечно.
      Ответить
    • Не файрятся. Это наверное фиксирование размеров элемента с помощью inline стилей. Нормально.
      Ответить
    • var f = $(element).width; f(f());

      fix *
      Ответить
      • Почти Y комбинатор.
        Ответить
      • var fix = function(f) { f(f()); }
        fix($(element).width);
        fix($(element).height);
        Чтобы подчеркнуть семантику и скрыть детали реализации.
        Ответить
      • Контекст.
        Ответить
        • А ж.квери не привязывает методы автоматически к объектам? Хотя, да, кому такое может прийти в голову, это ж ж.скрипт...
          Ну, тогда:
          var f = function (element) {
              return function (f) { f.call(element, f.call(element)); } }($(element));
          f($.prototype.width);
          f($.prototype.height);

          (Скорее всего не заработает, т.как нельзя же так просто взять и объявить методы у прототипа, почти наверняка они добавляются каждому объекту отдельно.
          Ответить
          • Даже так:

            (function($){
                $.fn.trueFix = function() {
                    this.each(function() {
                        $(this).width($(this).width());
                        $(this).height($(this).height());
                    }
                };
            })(jQuery);
            
            $(element).trueFix();
            Ответить
            • Ну так обычный говнокод с повторениями, повторным созданием одинаковых объектов и т.д.
              Ответить
            • Пфф...
              jQuery.fn.fap = function(key){
                return this[key](this[key]());
              }
              
              $(element).fap('width').fap('height');
              Ответить
    • Это особая уличная магия.
      Ответить
    • Это типа document.location.href = document.location.href? А так да, подергивание.
      Ответить
      • это не подергивание, а явная установка, возможно, вычисленных значений. вебопроблемы-с...
        Ответить
        • Это height=height, я правильно понял?
          Ответить
          • Всё правильно. И я даже догадываюсь, для чего это. В вёрстке может быть задано max-height (и|или) min-height, но не задано явно height либо задано в процентах. Тогда этот код жёстко установит height.
            Ответить
            • > Тогда этот код жёстко установит height.
              А когда юзер сделает браузер поуже - весь сайт распидорасит ;)
              Ответить
              • скорее всего нет, догадываюсь, что этот код задан внутри обработчика ресайза, как раз чтобы сайт не пидорасило )
                Ответить
        • Да, вот полигон для демонстрации:
          <div style="width:100%">kokoko</div>
          <div style="max-width:300px">kokoko</div>
          <div style="min-width:300px">kokoko</div>
          
          <script type="text/javascript" src="http://yandex.st/jquery/2.0.3/jquery.min.js"></script>
          <script type="text/javascript">
            $('div').each(function(){
              $(this).append(' style='+$(this).attr('style')+';');
              $(this).append(' width='+$(this).width());
            });
          </script>
          Как бы мы ни задавали width/height, $.width() и $.height() вернут вычисленное значение.
          Ответить
    • Такая контрукция может использоваться для очистки canvas'а (самый быстрый способ). А вообще - да, не надо так делать)
      Ответить
    • vanished
      Ответить

    Добавить комментарий