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

    +149

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    $(function(){
        var m_small = $('.met_small');
        var met_small = $('.metka_small');
        m_small.on('click', function(){
            var text = $(this).text();
            $('#tmet2').find('h2').html(text);
            m_small.each(function(){
                $(this).children('p').css({
                    'color' : '#08579E'
                });
            });
            var e = $(this);
            e.children('p').css({
                'color' : '#000'
            });
            met_small.each(function(){
                $(this).removeClass('metka_small_active');
            })
            e.children('.metka_small').addClass('metka_small_active');
        });
    });
    $(function(){
        $('.met').not('.cont').on('click',function(){
            var text = $(this).text();
            $('#tmet2').find('h2').html(text);
            $('.met').each(function(){
                $(this).children('p').css({
                    'color' : '#08579E'
                });
            });
            var e = $(this);
            e.children('p').css({
                'color' : '#000  '
            });
            $('.metka').each(function(){
                $(this).removeClass('metka_active');
            })
            e.children('.metka').addClass('metka_active');
        });
    });

    Я в js не давно. Возможно ли эти две функции объединить в одну ?
    Они делают одно и тоже, просто для двух разных элементов.

    Запостил: Heckfy_top, 11 Января 2013

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

    • > Возможно ли эти две функции объединить в одну ?

      Удали строки 21 и 22
      Ответить
    • Ахаха, я имел в виду упростить.
      Ответить
      • Это уже только за деньги.
        Ответить
      • Тут проще всю вёрстку переделать, чем страдать над этими функциями. Например, .metka_small → .metka .small
        Ответить
    • По-моему столько вреда от одной отдельно взятой библиотеки одному языку, сколько Жквери принесла жабоскрипту не делал никто. Даже гирлянды из аннотаций в некоторых Явовских библиотеках и ЛинК ни в какое сравнение не идут.

      function childColorUpdater(parent, selected, commonClass, selectedClass) {
          parent = $(parent);
          parent.each(function(){
              $(this).addClass(commonClass);
          });
          selected = parent.children(selected);
          selected.removeClass(commonClass);
          selected.addClass(selectedClass);
          return function (newSelection) {
              var future = parent.children(newSelection);
              selected.removeClass(selectedClass);
              selected.addClass(commonClass);
              future.removeClass(commonClass);
              future.addClass(selectedClass);
              selected = future;
          }
      }
      var activeMarkUpdater =
          childColorUpdater('quеry for parent',
                            'query for child in parent',
                            'common class',
                            'selection class');
      activeMarkUpdater('new selection query');


      Например, можно было начать с такого. (Убираем ненужный цикл переназначения классов = уменьшаем нагрузку при отрисовке, уменьшаем количество запросов к ДОМу, которые тоже недешевые, убираем кучу динамических выделений памяти нужные для создания новых функций). Если подумать дальше, то можно разобраться с тем, что именно делает removeClass и addClass и заменить их обычными функциями - после чего выбросить нахер Жквери. Аналогично с each.
      Ответить
    • > Я в js не давно.
      Может быть сначала имеет смысл подучить русский?
      Ответить
      • Мне кажется, это опечатка в слове "гавно"
        Ответить
        • Тогда было бы:
          Я в js не гавно, а Д'Артаньян!
          В нынешней интерпретации должно быть слитно.
          Ответить
      • Все возможно.
        Ответить

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