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

    +169

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    if(navigator.appName == "Microsoft Internet Explorer") {
    	for(var i=0;i<$('.product_documents').length;i++)  if( ( (firstLaunch_onChangeDocs) && ($('.product_documents')[i].selectedIndex==0)) || (!firstLaunch_onChangeDocs) )
    	{
    	  document.getElementById($('.product_documents')[i].id).innerHTML = '';
    	  document.getElementById($('.product_documents')[i].id).outerHTML = document.getElementById($('.product_documents')[i].id).outerHTML.replace("</SELECT>", jsInternalDocuments + '</select>')
    	}
      } else
    	for(var i=0;i<$('.product_documents').length;i++)  if( ( (firstLaunch_onChangeDocs) && ($('.product_documents')[i].selectedIndex==0)) || (!firstLaunch_onChangeDocs) )
    	  $('.product_documents')[i].innerHTML = jsInternalDocuments;

    Очень альтернативная техника использования jquery.

    Запостил: clauclauclau, 06 Декабря 2012

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

    • Пять поисков элементов с классом product_documents за каждую итерацию для IE и три - для остальных.
      O(N^2) на пустом месте - это волшебно.
      Ответить
    • >document.getElementById($('.product_doc uments')[i].id).innerHTML = '';
      За это вырезать всю семь до 5 колена. Это же просто не возможно.
      Ответить
    • Юмористическое программирование? Трудно поверить, что такое писали всерьёз.
      Ответить
      • Увы, всерьез. Это b2b сайт крупного производителя промышленной продукции. Исключительные юмористы писали.
        Ответить
      • По-моему, человек заучил что $('.product_documents') - это список элементов с классом product_documents. Вот он и работает с ним как со списком. А то, что этот список строится заново при каждом вызове, осталось за кадром.
        Т.е. имеем знание внешних атрибутов без понимания сути происходящего.
        Ответить
        • А он не кэшируется? Я не очень в курсе начинки jQuery, но меня смутило намерение брать по идентификатору элемент, ссылка на который уже получена.
          Ответить
          • . - это не идентификатор, это класс. jQuery позволяет использовать CSS нотацию при запросах.
            И нет, он не кэшируется. DOM-структура может поменяться, а отслеживать это... даже если можно, дешевле просто строить каждый раз список заново.
            Ответить
            • «. - это не идентификатор, это класс.»
              Нет, я имею в виду то, что дальше делается: у узла берётся айдишник и по нему мы получаем тот же узел. Если автора смущает, что сначала он получает не совсем узел, а jQuery-объект, и что с ним делать, он не знает, так просто .get(0) же.
              Ответить
              • А, сразу не вкурил. И впрямь второй уровень говна.
                Ответить
            • Поправка: не jQuery, а SizzleJS

              > а отслеживать это
              https://developer.mozilla.org/en-US/docs/DOM/Mutation_events
              Ответить
              • И городить такую красоту просто ради того чтобы скрыть фундаментальные ошибки чьего-то говнокода?
                Не, ну можно конечно... Но нужно ли?
                Ответить
                • >>фундаментальные ошибки чьего-то говнокода?
                  JQuery? Маздай!
                  Ответить

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