• innerHTML в таблицах

      Известно, что в IE свойство innerHTML для таблиц является свойством только для чтения. support.microsoft.com/kb/239832

      В итоге для изменения содержимого таблицы, нужно бегать по DOM. Что не всегда удобно, особенно если для каждой ячейки назначено какое-то событие.
      Я надеялся, что в jquery эта ситуация исправлениа. Но нет. Код
      $('#id_tr').html('<td><button onclick="my_f(new_id)">new action</button></td>');
      тоже не работает должным образом.

      Читать дальше →
    • Getters & Setters в Javascript

        Много людей знают, что такое getter'ы и setter'ы во многих языках программирования. Есть эти чудесные штуки и в JavaScript, хоть узнал я об этом совсем недавно (темень я необразованная). Речь пойдёт не только и не столько про методы getSomeProperty()/setSomeProperty(...), а про более интересную реализацию — псевдо-аттрибуты, при изменении которых будут вызываться функции-обработчики.

        Дальше...
      • Сравнение скорости обработки JSON разными парсерами и браузерами

          Преамбула


          Занимаясь сейчас написанием интерфейса/middleware для одной IPTV-STB приставки, столкнулся с достаточно медленной работой javascript-парсера встроенной Оперы при вызове eval (пока встроенной была не Опера, а ANT Galio все было еще печальнее, но это тема отдельного разговора). То есть, там вообще все работает медленно, т.к. это все-таки просто приставка, но в данном конкретном случае с тормозами надо было что-то делать — через ajax грузилась программа ТВ-передач, и пока eval парсил приходящую JSON-строку, приставка на действия пользователя вообще не откликалась (причем достаточно долго). В итоге я решил вопрос использованием JSONP, который заработал на приставке в несколько раз быстрее (а заодно и решил вопрос с кросс-доменностью), но попутно задумался над производительностью парсеров в принципе. На хабре нашел только одну статью про это, но JSONP там не было… Плюс в комментах были несколько позитивных критических замечаний, поэтому решил провести свое тестирование. Используются все парсеры с JSON.org и браузеры Opera 9.64, Firefox 3.5, Internet Explorer 8, Google Chrome 2, Safari 4.
          Результаты под катом
        • AdBlock похитил этот баннер, но баннеры не зубы — отрастут

          Подробнее
          Реклама
        • Нужны ли «приватные» свойства объектов в Javascript?

            В последнее время во многих статьях (на Хабре и не только) я часто вижу примеры эмуляции приватных свойств объектов в JS через замыкания. Авторы обычно объясняют это своим желанием использовать такой механизм ООП, как инкапсуляция, и тем самым гарантировать работу с объектом исключительно посредством его методов, не затрагивая напрямую свойства.

            В этой статье я предлагаю объективно рассмотреть достоинства и недостатки такого подхода, чтобы каждый мог для себя решить, стоит ли его использовать или нет.

            Читать дальше →
          • Парсим URL

              Хочу поделиться одной полезной утилиткой, написанной на pure JavaScript, — URL. По сути это небольшой парсер URL'ов, работающий почти как window.location, но не перезагружающий страницу браузера при манипуляциях.

              А заодно скажу пару слов про getters & setters в JavaScript.

              UPD1: по просьбам трудящихся, вынесу сюда примеры:
              // Пусть текущий URL = 'http://my.site.com/somepath/'
              var u = new URL('relative/path/index.html')
              u.href // my.site.com/somepath/relative/path/index.html
              u.href = '/absolute/path.php?a=8#some-hash'
              u.href // my.site.com/absolute/path.php?a=8#some-hash
              u.hash // #some-hash
              u.protocol = 'https:'
              u.href // my.site.com/absolute/path.php?a=8#some-hash
              u.host = 'another.site.com:8080'
              u.href // another.site.com:8080/absolute/path.php?a=8#some-hash
              u.port // 8080
              // и так далее, и тому подобное

              * This source code was highlighted with Source Code Highlighter.

              Работает в FF3+ (может и в 2+, не пробовал) и в IE6+ ( и это — моё ноу-хау :-) ).
              Разобрана в статье также полностью кросс-браузерная реализация, но в использовании — немного более громоздкая:
              // Пусть текущий URL = 'http://my.site.com/somepath/'
              var u = new URL('relative/path/index.html')
              u.href() // my.site.com/somepath/relative/path/index.html
              u.href('/absolute/path.php?a=8#some-hash')
              u.href() // my.site.com/absolute/path.php?a=8#some-hash
              // и т.д.

              * This source code was highlighted with Source Code Highlighter.


              Да, и я привожу свой листинг полностью, извиняйте, так надо.

              Прошу под кат...
            • Реализация паттерна декоратор на JS

                Суть паттерна в том, что есть класс с фактической функциональностью (компонент) и опциональными классами-обертками, которые дополняют основной функционал (декораторы). А фишка в том, что декораторов может быть сколько угодно, совмещаться они могут в произвольном порядке и (поскольку требуют от компонента только интерфейса) — могут работать с разными компонентами.

                Безусловно, реализовать что-то похожее можно даже за счет только лишь того, что функции в JS являются объектами первого уровня, но мне бы хотелось поделиться реализацией весьма близкой к ГОСТу GoF'у.

                UPD: ссылка на рабочий пример, спасибо Barttos.

                Перед хабракатом: в скрипте присутствует инкапсуляция, наследование (по сути) осуществляется через call, jQuery отсутствует — если Ваша идеология не позволяет принять такие ограничения, пожалуйста, не пишите об этом в комментах и, еще лучше, не читайте эту статью. Конструктивная критика и вопросы приветствуются.

                Читать дальше →
              • Javascript от а и до… II

                  Вот и продолжение первой части, много времени прошло, и вот… здесь я, как и обещал, расскажу поподробней об основных типах. Для начала пара замечаний, первая часть не прошла естественно без критики, так что вступление будет 'работой над ошибками'. В дальнейшем такие работы над ошибками буду вставлять регулярно, и надеюсь хабралюди этому посодействуют…
                  Читать дальше →
                Самое читаемое