О чём это?
Snippet — небольшой фрагмент програмного кода, иллюстрирующий решение конкретной задачи, пригодный для повторного использования. Большинство из 92 статей на этом сайте посвящено вопросам веб-программирования и администрирования веб-серверов.
Disclaimer. Статьи отражают личное мнение, взгляды и подходы авторов, а также могут содержать ошибки и неточности, но мы очень-очень стараемся :)
Слияние JQuery-объектов
Часто для уменьшения количества запросов к DOM-дереву нужные элементы заранее выбираются и сохраняются в локальных переменных в виде экземпляра объектов JQuery. Например, таким образом:
var someNodes = $('.some-class');
var someOtherNodes = $('.some-other-class');
Как быть, если нужно применить какую-либо JQuery-функцию (например, hide() к элементам из обеих переменных?
Сниппет без решения: 120 dpi fix + Opera 10.5
Приём «шрифты в em» прижился у многих верстальщиков и продолжает использоваться несмотря на постепенный отказ от поддержки IE6 и перехода большинства браузеров на full page zoom. Для сохранения размера шрифта таким, как его задумал дизайнер при переключении масштаба в операционной системе применяется другой известный приём «120 dpi и шрифты в em» (хотя это и не совсем правильно, т.к. пользователь увеличивает шрифт для удобства чтения).
Судя по всему в Opera 10.5x (проверяли на 10.51 и 10.54) не работает следующая конструкция из CSS Media Queries:
@media all and (min-resolution: 120dpi) {
...
}
В более ранних и более поздних версиях этого браузера приём работает.
Конвертация timestamp'a (unixtime) в экземпляр класса DateTime
Как вставить Tab (символ табуляции) в textarea
В случае использования на сайте для подготовки контента разметки наподобие Markdown может понадобиться ввести символ табуляции в <textarea>. По умолчанию нажатие клавиши Tab обрабатывается браузерами как переход к следующему элементу формы, чтобы изменить это поведение необходимы дополнительные компоненты, например JQuery-плагин Tabby.
Получение значения единственного элемента ассоциативного массива в JavaScript
В разрабатываемом приложении серверная часть предоставляла данные в JSON-формате примерно такого вида:
var json_data = {
features: {
feature1: { 4401: 'Искомое значение 1'},
feature2: { 4056: 'Искомое значение 2'},
feature3: { 1123: 'Искомое значение 3'},
...
}
};
По логике приложения нужно было перебрать все значения объекта features и получить строки отмеченные на листинге как искомые. Проблема заключалась в том, что нужная переменная является значением единственного элемента ассоциативного массива (например, feature1) с заранее неизвестным ключом (например, для feature1 значение 4401 заранее неизвестно).
Выборка данных по датам с помощью GROUP BY, включая даты для которые данные отстутствуют
К примеру, в БД MS SQL Server есть таблица Logs в которую заносятся данные об активности пользователей. По этим данным необходимо сделать выборку, например, подсчитать количество действий пользователей по дням месяца. По выходным и праздникам пользователи приложением не пользуются, поэтому при использовании обычного GROUP BY в результате выборки будут представлены только те даты, для которых нашлись данные, что, например, для построения графиков не подходит.
Отображение тега label в Editor Template'е в ASP.NET MVC
В ASP.NET MVC 2 появилась удобная возможность — определять шаблоны для отображения и редактирования свойств модели определённых типов (как стандартных, например String или DateTime так и пользовательских).
Шаблоны применяются, например, с помощью HTML-хелперов Html.EditorFor() и Html.DisplayFor(). Однако, чтобы добраться до мета-информации о редактируемом свойстве модели внутри подобных шаблонов придется постараться.
Класс для хранения настроек приложения на ActionScript3
Для хранения настроек ActionScript-приложения удобно использовать класс-Singleton, к которому на лету можно добавлять свойства. Решение по мотивам примера из книги Advanced ActionScript 3 with Design Patterns.
Ошибка Validation of viewstate MAC failed (Проверка состояние вида MAC не удалась) или 404 во время PostBack при использовании HTML-тега base
Проблема возникает, если для страниц сайта на ASP.NET Web Forms определён тег <base />, например, следующим образом:
<base href="http://example.com" />
Страницы, находящиеся на том же уровне, что и URL в теге <base /> будут работать нормально (например, такая страница: http://example.com/SomePage.aspx), но стоит
попытаться использовать ещё одну страницу с тем же именем в подпапке, например, http://example.com/Folder/SomePage.aspx и при первом PostBack'e возникнет ошибка «Validation of viewstate MAC failed (Проверка состояние вида MAC не удалась)». В случае, если на сайте существует только одна страница с таким именем, т.е. или http://example.com/Folder/SomePage.aspx, или http://example.com/SomePage.aspx ошибка будет уже стандартной HTTP-ошибкой 404.
Причина ошибки в том, что тег <form> будет сформируется следующим образом:
<form name="aspnetForm" method="post" action="SomePage.aspx" id="aspnetForm">
Из-за тега <base /> результирующий URL для отправки формы будет неверным: http://example.com/SomePage.aspx, где часть http://example.com/ берется из тега <base />, а SomePage.aspx из атрибута action формы.
Способ исправления этой ошибки аналогичен решению проблемы с PostBack'ом при использовании URL Rewriting'а.
Генерация тестовых данных средствами MySQL
Средства генерации тестовых данных встроены во многие утилиты для работы с БД, существует большое количество сторонних и даже он-лайн инструментов. Конечно, набор реальных тестовых данных ничто не заменит, но для случая «нагенерить чего-нибудь да по-больше» можно обойтись и встроенными возможностями MySQL.
