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

    +147

    1. 1
    2. 2
    3. 3
    $(".rating").each(function() { 
    $(this).find('input').hide(); 
    });

    Самое интересное, что в блоке .rating никогда нет и не было input

    Запостил: yamaha252, 29 Июля 2013

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

    • $(".rating input").hide();


      Fixed?
      Ответить
      • А почему не 'input.rating' ?
        Ответить
        • input.rating - input'ы с CSS-классом rating.

          .rating input - input'ы, находящиеся на произвольной глубине внутри элементов с CSS-классом rating.
          Ответить
          • Кстати, а find() ищет на произвольную глубину или только непосредственных детей?
            Ответить
      • $(".rating input")
        Вроде как в jQuery идет разбор справа налево, т. е. сначала достанет все input'ы на странице, а потом уже будет смотреть кто из них в .rating находится.

        $('.rating').find('input') - при такой записи поиск будет вестись только в .rating

        Вопрос знатокам: правда ли это? :)
        Ответить
        • > Вроде как в jQuery идет разбор справа налево
          Что-то мне подсказывает, что это самый обычный CSS селектор. Т.е. эта запись означает "input, лежащий внутри некой хрени с классом rating".

          > т. е. сначала достанет все input'ы на странице, а потом уже будет смотреть кто из них в .rating находится
          > при такой записи поиск будет вестись только в .rating
          А какая разница? Результат будет совершенно одинаковый. Ну разве что производительность, возможно, будет разная, но это уже детали реализации, и они зависят как от браузера, так и от того где была левая пятка разрабов жквери во время написания кода ;)
          Ответить
          • Есть разные движки разбора css-селекторов. Одни работают слева направо, другие справа налево. В jQuery используется Sizzle, который работает справа налево. Поэтому чем конкретнее правая часть, тем быстрее он должен работать.

            Разница действительно в быстродействии. Весь вопрос в том существенна ли она или нет.
            Ответить
            • А чего ожидается больше на странице: инпутов или .rating'ов?
              Ответить
              • > Самое интересное, что в блоке .rating никогда нет и не было input
                Ответить
                • Стало быть, алгоритм, по которому работает Sizzle, самый быстрый: он сначала найдёт все инпуты, которых ноль штук, а проверять родителей элементов пустого множества уже не придётся. Хотя могут же быть и инпуты вне блока .rating... Вдруг вся страница усеяна полями ввода?
                  Ответить
                  • Вот сейчас не найду, но помню как на МСДН форуме человек жаловася на то, что поставил на форму 500 кнопок, и стало тормозить. Просил помочь советом.
                    Ответить
                    • Попробую угадать, что он писал. Игру «Сапёр» на поле 20×25?
                      Ответить
                      • Вполне возможно, что это обычная форма. Просто от пользователя требуется число от 1 до 500, но что бы не писать сложную проверку данных из текстбокса, он оптимизировал. Я бы сделал 500 селектов...
                        Ответить
                      • На сколько я помню: интереактивная карта мира, или что-то такое, вобщем, да, близко к саперу.
                        Ответить
      • Правильно писать так, иначе не будет перфоманса:
        $(document.querySelectorAll(".rating input")).hide();
        Ответить
        • кстати, Sizzle (читай jquery) делает именно так, если querySelectorAll поддерживается браузером. Если же он не поддерживается или выбрасывает исключение (не все критерии поддерживаются), то sizzle использует свой движок.
          Ответить
          • Так, да не совсем: Sizzle сначала тестирует формат селектора и при отрицательном результате вызывает свой движок, так что до исключения дело может не дойти. См. rbuggyQSA.
            Ответить
    • А в жаваскрипте есть async или надо пердолить цепочку коллбеков?
      Ответить
      • Угадай с одного раза ;)
        Ответить
        • Сосать, как и с foreach для массивов?
          Ответить
          • А что с foreach?
            for(index in object) // работает
            for(element of array) // будет в ES6, но уже реализован в FF

            разве что Object.prototype.hasOwnProperty может омрачить жизнь.
            Ответить
    • Офтопик: «jQuery 2.x has the same API as jQuery 1.x, but does not support Internet Explorer 6, 7, or 8.»
      Ответить
      • у кого-то заказчики еще просят 8 ie и ниже?
        Ответить
        • Было дело, когда посетитель одного сайта на странице соцсети оставил сообщение, что не может залогиниться из IE7. На это ему посоветовали обновить браузер. Следующим сообщением было, что обновил, но снова залогиниться не может. На вопрос, на что же он обновил, ответом был... IE8. Тем временем подходил к концу 2012-й год...
          Ответить
          • если у юзера xp, разве выше 8го он сможет установить?
            Ответить
            • Не сможет. И SP3, насколько помню, еще поддерживается мс. Поэтому забивать на ие8 пока что не стоит.
              Ответить
              • Если заказчик готов платить за это отдельно - можно и поддерживать. В остальных случаях - нет, нет, нет и еще раз нет.
                Ответить
              • Вот я всё время удивляюсь, с какого хрена самые свежие версии каких-нибудь Chrome и Firefox спокойно встают и на XP, и на висту, и на 7, не говоря уже о длинном юниксовом списке, а для того, чтобы использовать IE, надо купить новую винду.
                XP: IE8-, Vista: IE9-, Seven: IE10-. Кстати, чтобы посмотреть на IE10 под семёркой, пришлось ещё несколько *.msi доустановить. А это всего лишь браузер, установка его на родную ОС должна сводиться к нажатию "установить" и "готово".
                Ответить
                • >чтобы посмотреть на IE10 под семёркой, пришлось ещё несколько *.msi доустановить
                  Это ты еще не пробовал их удалять, дабы избавиться от говна навсегда.
                  Удали 8-й. Вылезет 6-й.
                  Много жаришся удаляешь 6-й, а из недр операционки появится 5-й.
                  Ответить
                • Оно настолько глубоко залезло в дебри, что сам осёл/медиаплеер/ещё чёрт знает что и есть часть системы. Его даже не получится толком удалить, максимум - спрятать.
                  Зачем так сделано, почему никто не подумал про возможные обновления - тайна велика. Или гуглить надо, а лень.
                  Ответить
                  • Из Windows 95 ещё можно было удалить IE (он тогда ещё не входил в комплект обязательной поставки), а для полного удаления его из 98-го, если я не ошибаюсь, некоторые dll-ки приходилось заменять старыми версиями, потому что новые версии ссылались на части Тридента.

                    И да, все современные веб-браузеры, кроме IE, можно установить не только на XP, но и на Windows 98.

                    P.S. А KHTML в KDE можно ли считать «частью системы», как Trident в маздайке?
                    Ответить
                  • ну ie как com-объект было бы странно удалять из системы
                    на него может быть повязано много чего, системного в т.ч.
                    даже на моей старой работе были проекты, которые очень сильно полагались на DHtmlDialog
                    Ответить
                • Ты еще про дотнет вспомни.

                  Все языки становятся на любую версию, по крайней мере Win32, только мс хуйню придумывает.
                  Ответить
                  • Причем дотнет ставится долго и нудно, прописываясь во все места (есесно - только под админом, ни о какой портабельности речь не идет), в лучших традициях 6 васика. На вопрос "а почему так?" на форуме отвечают "ну вот так оно".
                    Ответить
        • Больше 8ки на XP нет ничего, хотя, возможно, XP уже "ненужна".
          Ответить
    • Снился мне какой-то сумбурный разврат, что впрочем неудивительно.
      Ответить

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