<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>jQuery и другое... &#187; javascript</title>
	<atom:link href="http://www.linkexchanger.su/tag/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linkexchanger.su</link>
	<description>css, html, php, javascript, jQuery, ajax ... - решения, примеры, рецепты</description>
	<lastBuildDate>Sun, 08 Jan 2012 13:25:49 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>jQuery. Сборник рецептов (+ CD-ROM)</title>
		<link>http://www.linkexchanger.su/2011/842.html</link>
		<comments>http://www.linkexchanger.su/2011/842.html#comments</comments>
		<pubDate>Tue, 02 Aug 2011 09:21:13 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[jQuery документация]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[документация jQuery]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/?p=842</guid>
		<description><![CDATA[В августе в интернет-магазинах должна появиться в продаже книга jQuery. Сборник рецептов (+ CD-ROM). Это второе издание книги, которая вышла в издательстве &#171;БХВ-Петербург&#187; чуть более года назад. Второе издание дорабатывалось мной с учетом замечаний и пожеланий читателей и вновь появившихся возможностей.

Геннадий Самков
jQuery. Сборник рецептов (+ CD-ROM)
Издательство: БХВ-Петербург, 2011 г.
Мягкая обложка, 416 стр.
ISBN 978-5-9775-0732-5
Тираж: 1500 экз.
Формат: [...]]]></description>
			<content:encoded><![CDATA[<p>В августе в интернет-магазинах должна появиться в продаже книга <strong>jQuery. Сборник рецептов (+ CD-ROM)</strong>. Это <strong>второе издание</strong> книги, которая вышла в издательстве &laquo;БХВ-Петербург&raquo; чуть более года назад. Второе издание дорабатывалось мной с учетом замечаний и пожеланий читателей и вновь появившихся возможностей.</p>
<ul style="float: right; width: 200px">
<li>Геннадий Самков</li>
<li>jQuery. Сборник рецептов (+ CD-ROM)</li>
<li>Издательство: БХВ-Петербург, 2011 г.</li>
<li>Мягкая обложка, 416 стр.</li>
<li>ISBN 978-5-9775-0732-5</li>
<li>Тираж: 1500 экз.</li>
<li>Формат: 70&#215;100/16</li>
</ul>
<p><a href="http://www.ozon.ru/context/detail/id/6843919/?partner=lexsu&#038;from=bar" title="jQuery. Сборник рецептов" target="_blank"><img style="border:1px solid #333;" src="http://www.linkexchanger.su/wp-content/uploads/2011/07/jquery2.jpg" alt="jQuery. Сборник рецептов" /></a><span id="more-842"></span></p>
<p><strong>Аннотация:</strong><br />
Книга является сборником решений наиболее часто встречающихся задач при веб-программировании пользовательских интерфейсов с использованием библиотеки jQuery. Рассмотрены практически все методы и вспомогательные функции jQuery, в том числе обеспечивающие взаимодействие jQuery и AJAX. Подробно рассказано о надстройке UI jQuery. Приведено большое количество примеров использования плагинов для jQuery &#8211; создание графиков и диаграмм, фотогалерей, меню, работа с таймерами и cookies, обработка табличных данных и др. Во втором издании в примерах используется библиотека jQuery версий 1.4.4 и 1.5.2, а также надстройка UI jQuery 1.8.9.<br />
Компакт-диск содержит примеры из книги, файлы библиотеки jQuery 1.4.4 и 1.5.2, файлы надстройки UI jQuery 1.8.9, а также файлы расширений сторонних разработчиков.</p>
<p>От себя могу добавить, что книга написана в таком же духе, как и <a href="http://www.linkexchanger.su/2010/115.html">первое издание</a>, т.е. примеры, примеры и еще раз примеры плюс подробные разъяснения&#8230;.</p>
<p><a target="_blank" href="http://mmedia.ozon.ru/multimedia/book_file/1003104287.pdf">Отрывок книги в PDF</a></p>
<p><strong>Полное содержание:</strong></p>
<table border="0" width="100%">
<tr>
<td>Введение</td>
<td>7</td>
</tr>
<tr>
<td>Структура книги</td>
<td>7</td>
</tr>
<tr>
<td>Как работать с книгой</td>
<td>8</td>
</tr>
<tr>
<td>Источники информации</td>
<td>9</td>
</tr>
<tr>
<td>Благодарности</td>
<td>10</td>
</tr>
<tr>
<td>
<h3>ЧАСТЬ I. МЕТОДЫ БИБЛИОТЕКИ JQUERY</h3>
</td>
<td>11</td>
</tr>
<tr>
<td>
<h3>Глава 1. Выбор элементов</h3>
</td>
<td>13</td>
</tr>
<tr>
<td>1.1. Базовые правила</td>
<td>13</td>
</tr>
<tr>
<td>1.2. Выбор элементов с учетом иерархии</td>
<td>20</td>
</tr>
<tr>
<td>1.3. Основные фильтры</td>
<td>24</td>
</tr>
<tr>
<td>1.4. Фильтрация по содержимому</td>
<td>30</td>
</tr>
<tr>
<td>1.5. Фильтры видимых и невидимых элементов</td>
<td>34</td>
</tr>
<tr>
<td>1.6. Селекторы атрибутов</td>
<td>36</td>
</tr>
<tr>
<td>1.7. Фильтры элементов форм</td>
<td>40</td>
</tr>
<tr>
<td>1.8. Фильтры состояния элементов форм</td>
<td>43</td>
</tr>
<tr>
<td>1.9. Фильтры элементов-потомков</td>
<td>47</td>
</tr>
<tr>
<td>
<h3>Глава 2. Атрибуты элементов</h3>
</td>
<td>53</td>
</tr>
<tr>
<td>2.1. Управление атрибутами элементов</td>
<td>53</td>
</tr>
<tr>
<td>2.2. Работа с атрибутом class</td>
<td>57</td>
</tr>
<tr>
<td>2.3. Работа с HTML и текстом</td>
<td>59</td>
</tr>
<tr>
<td>2.4. Работа с атрибутом value</td>
<td>61</td>
</tr>
<tr>
<td>
<h3>Глава 3. Визуальные эффекты</h3>
</td>
<td>67</td>
</tr>
<tr>
<td>3.1. Как показывать и скрывать элементы</td>
<td>67</td>
</tr>
<tr>
<td>3.2. Эффекты &laquo;скольжения&raquo; и &laquo;затухания&raquo;</td>
<td>70</td>
</tr>
<tr>
<td>3.3. Создание анимации</td>
<td>74</td>
</tr>
<tr>
<td>3.4. Эффекты UI jQuery</td>
<td>79</td>
</tr>
<tr>
<td>
<h3>Глава 4. Работа с CSS-свойствами</h3>
</td>
<td>84</td>
</tr>
<tr>
<td>4.1. Как получать и устанавливать значения CSS-свойств элементов</td>
<td>84</td>
</tr>
<tr>
<td>4.2. Ширина и высота элементов</td>
<td>88</td>
</tr>
<tr>
<td>4.3. Позиционирование элементов</td>
<td>90</td>
</tr>
<tr>
<td>
<h3>Глава 5. Работа с данными в jQuery</h3>
</td>
<td>94</td>
</tr>
<tr>
<td>5.1. Сохранение и извлечение данных</td>
<td>94</td>
</tr>
<tr>
<td>
<h3>Глава 6. Манипуляции над элементами</h3>
</td>
<td>98</td>
</tr>
<tr>
<td>6.1. Изменение содержимого элементов</td>
<td>98</td>
</tr>
<tr>
<td>6.2. Как вставлять элементы в DOM</td>
<td>101</td>
</tr>
<tr>
<td>6.3. Замена, удаление и копирование элементов</td>
<td>111</td>
</tr>
<tr>
<td>
<h3>Глава 7. Перемещение по элементам</h3>
</td>
<td>118</td>
</tr>
<tr>
<td>7.1. Поиск нужных элементов в DOM</td>
<td>118</td>
</tr>
<tr>
<td>7.2. Фильтрация элементов набора</td>
<td>128</td>
</tr>
<tr>
<td>7.3. Прочие методы</td>
<td>138</td>
</tr>
<tr>
<td>
<h3>Глава 8. События и их обработка</h3>
</td>
<td>144</td>
</tr>
<tr>
<td>8.1. События документа</td>
<td>144</td>
</tr>
<tr>
<td>8.2. Назначение, удаление и вызов событий</td>
<td>146</td>
</tr>
<tr>
<td>8.3. События мыши, клавиатуры, браузера и форм</td>
<td>156</td>
</tr>
<tr>
<td>
<h3>Глава 9. Взаимодействие jQuery и AJAX</h3>
</td>
<td>165</td>
</tr>
<tr>
<td>9.1. Сокращенные методы</td>
<td>165</td>
</tr>
<tr>
<td>9.2. Вспомогательные функции $.ajax() и $ajaxSetup()</td>
<td>178</td>
</tr>
<tr>
<td>9.3. События AJAX</td>
<td>187</td>
</tr>
<tr>
<td>9.4. Полезные вспомогательные функции</td>
<td>192</td>
</tr>
<tr>
<td>
<h3>Глава 10. Полезные вспомогательные функции и методы jQuery</h3>
</td>
<td>195</td>
</tr>
<tr>
<td>10.1. Некоторые операции с массивами и объектами в jQuery</td>
<td>195</td>
</tr>
<tr>
<td>10.2. Некоторые операции с наборами элементов в jQuery</td>
<td>208</td>
</tr>
<tr>
<td>10.3. Другие полезные вспомогательные функции</td>
<td>214</td>
</tr>
<tr>
<td>
<h3>ЧАСТЬ II. РАСШИРЕНИЯ ДЛЯ БИБЛИОТЕКИ JQUERY</h3>
</td>
<td>219</td>
</tr>
<tr>
<td>
<h3>Глава 11. Меню для веб-сайта</h3>
</td>
<td>221</td>
</tr>
<tr>
<td>11.1. Плагин jQuery Superfish</td>
<td>221</td>
</tr>
<tr>
<td>
<h3>Глава 12. Работа с таблицами</h3>
</td>
<td>230</td>
</tr>
<tr>
<td>12.1. Плагин jqGrid</td>
<td>230</td>
</tr>
<tr>
<td>
<h3>Глава 13. Графики и диаграммы</h3>
</td>
<td>250</td>
</tr>
<tr>
<td>13.1. Плагин jqPlot</td>
<td>250</td>
</tr>
<tr>
<td>
<h3>Глава 14. AJAX-формы</h3>
</td>
<td>262</td>
</tr>
<tr>
<td>14.1. Плагин jQuery Form</td>
<td>262</td>
</tr>
<tr>
<td>14.2. Плагин jQuery Validate</td>
<td>267</td>
</tr>
<tr>
<td>14.3. Плагин jQuery Uploadify</td>
<td>273</td>
</tr>
<tr>
<td>
<h3>Глава 15. Фотогалерея для сайта</h3>
</td>
<td>282</td>
</tr>
<tr>
<td>15.1. Фотогалерея FancyBox</td>
<td>282</td>
</tr>
<tr>
<td>
<h3>Глава 16. Несколько полезных плагинов</h3>
</td>
<td>297</td>
</tr>
<tr>
<td>16.1. jQuery Cookie</td>
<td>297</td>
</tr>
<tr>
<td>16.2. jQuery Timers</td>
<td>299</td>
</tr>
<tr>
<td>16.3. jQuery Cluetip</td>
<td>302</td>
</tr>
<tr>
<td>
<h3>Глава 17. UI jQuery — виджеты</h3>
</td>
<td>308</td>
</tr>
<tr>
<td>17.1. Виджет Accordion</td>
<td>308</td>
</tr>
<tr>
<td>17.2. Виджет Datepicker</td>
<td>318</td>
</tr>
<tr>
<td>17.3. Виджет Dialog</td>
<td>329</td>
</tr>
<tr>
<td>17.4. Виджет Progressbar</td>
<td>337</td>
</tr>
<tr>
<td>17.5. Виджет Slider</td>
<td>340</td>
</tr>
<tr>
<td>17.6. Виджет Tabs</td>
<td>346</td>
</tr>
<tr>
<td>17.7. Виджет Button</td>
<td>356</td>
</tr>
<tr>
<td>17.8. Виджет Autocomplete</td>
<td>361</td>
</tr>
<tr>
<td>
<h3>Глава 18. UI jQuery — взаимодействие с элементами страницы</h3>
</td>
<td>370</td>
</tr>
<tr>
<td>18.1. Draggable — перемещение элементов</td>
<td>370</td>
</tr>
<tr>
<td>18.2. Droppable — &laquo;сброс&raquo; элементов</td>
<td>379</td>
</tr>
<tr>
<td>18.3. Resizable — изменение размеров элементов</td>
<td>386</td>
</tr>
<tr>
<td>18.4. Selectable — выбор элементов</td>
<td>392</td>
</tr>
<tr>
<td>18.5. Sortable — сортировка элементов</td>
<td>399</td>
</tr>
<tr>
<td>Приложение. Описание компакт-диска</td>
<td>409</td>
</tr>
<tr>
<td>Литература</td>
<td>411</td>
</tr>
<tr>
<td>Предметный указатель</td>
<td>412</td>
</tr>
</table>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2011/842.html/feed</wfw:commentRss>
		<slash:comments>18</slash:comments>
		</item>
		<item>
		<title>JavaScript мастер-классы</title>
		<link>http://www.linkexchanger.su/2010/117.html</link>
		<comments>http://www.linkexchanger.su/2010/117.html#comments</comments>
		<pubDate>Mon, 25 Jan 2010 06:34:55 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[comet]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2010/117.html</guid>
		<description><![CDATA[Недавно узнал, что 20-21 февраля в Москве и 27-28 февраля в Санкт-Петербурге пройдут мастер-классы по Javascript, которые будет вести Илья Кантор &#8211; создатель  сайтов algolist.manual.ru и javascript.ru.
Это  мой уважаемый коллега, человек с большим опытом разработки сложных  приложений, в прошлом один из разработчиков javascript-фреймворка Dojo Toolkit.
» Профессиональное javascript-программирование
»  Сложный AJAX и COMET: [...]]]></description>
			<content:encoded><![CDATA[<p>Недавно узнал, что 20-21 февраля в Москве и 27-28 февраля в Санкт-Петербурге пройдут мастер-классы по Javascript, которые будет вести Илья Кантор &#8211; создатель  сайтов <a href="http://algolist.manual.ru">algolist.manual.ru</a> и <a href="http://javascript.ru">javascript.ru</a>.</p>
<p>Это  мой уважаемый коллега, человек с большим опытом разработки сложных  приложений, в прошлом один из разработчиков javascript-фреймворка <a href="http://dojotoolkit.org/">Dojo Toolkit</a>.</p>
<p>» Профессиональное javascript-программирование<br />
»  Сложный AJAX и COMET: тонкости Web 2.0<br />
» Мастер-класс по клиентской оптимизации<br />
» Секреты jQuery</p>
<p>Такие мастер-классы помогут узнать много нового, понять уровень своих знаний, получить новые идеи.</p>
<p>И еще, очень интересно! Принять участие в мастер-классе &laquo;<strong>Секреты jQuery</strong>&raquo; можно будет в режиме on-line.</p>
<p><strong><a href="http://javascript.ru/mk">Исходное объявление на javascript.ru »</a></strong><br />
<span id="more-117"></span></p>
<p>Для понимания материала необходимо знать javascript на минимальном уровне, писать простые скрипты. Содержание мастер-классов построено так, чтобы максимально глубоко раскрыть темы за короткий срок.</p>
<p>Теперь подробнее о содержании мастер-классов.</p>
<h3>&laquo;Профессиональное javascript-программирование&raquo;</h3>
<blockquote><p>- Javascript, browser tips &amp; tricks.<br />
- Фишки DOM, функции/замыкания, ООП &#8211; понятно и в деталях.<br />
- Малоизвестные возможности javascript и браузеров.<br />
- Javascript-фреймворки. Сравнение современных возможностей. jQuery в деталях.<br />
- Полезный инструментарий, который сделает вашу разработку быстрее и качественнее. Гораздо больше, чем Firebug.<br />
- Обмен информацией между окнами с разных доменов<br />
- HTML5: что уже есть, а что нас ждет уже скоро.</p></blockquote>
<p>Этот мастер класс &#8211; отнюдь не об основах javascript, здесь присутствует много информации для профессионалов.<br />
Москва: суббота, 20 февраля, 11.00<br />
Санкт-Петербург: суббота, 27 февраля, 11.00<br />
<em>Продолжительность &#8211; 4 часа.</em></p>
<h3>&laquo;Клиентская оптимизация&raquo;</h3>
<blockquote><p>- Способы и принципы сжатия javascript, что делать, чтобы код сжимался эффективнее.<br />
- Идеальное кеширование. Скрипты и серверная часть.<br />
- Эффективная оптимизация javascript. Подходы, цифры, рецепты.<br />
- Основные приемы оптимизации jQuery.<br />
- Ускорение загрузки страницы через HTTP pipelining.<br />
- Оптимизация с Google Gears и HTML5.<br />
- Google Closure Compiler в деталях<br />
- Удобные инструменты для оптимизации и профайлинга.</p></blockquote>
<p>Про то, как ускорить страницу, почти ничего не делая, и как серьезно ускорить страницу и сайт, если что-то сделать.<br />
Москва: воскресенье, 21 февраля, 11.00<br />
Санкт-Петербург: воскресенье, 28 февраля, 11.00<br />
<em>Продолжительность &#8211; 4 часа.</em></p>
<h3>&laquo;Сложный AJAX и COMET: тонкости Web 2.0&#8243;</h3>
<blockquote><p>- Асинхронная подгрузка событий с сервера (COMET) &#8211; различные варианты, сравнение и примеры реализации.<br />
- Кнопки back-forward, закладки и история с AJAX.<br />
- Cпособы написания чата/оповещающего демона, аспекты производительности и решения.<br />
- Кросс-доменные ограничения, способы их преодоления.<br />
- Асинхронный try..catch. Удобная работа с асинхронностью.<br />
- Инструменты для разработки и отладки сложных AJAX-приложений.<br />
- Специализированный COMET-сервер, установка, расширение, интеграция. Поднимем COMET прямо на мастер-классе.</p></blockquote>
<p>Мастер-класс сделает современные подходы простыми и понятными для вас, позволит улучшить те приложения, которые есть сейчас, и перейти к качественно новой разработке в будущем.<br />
Москва: суббота, 20 февраля, 16.00<br />
Санкт-Петербург: суббота, 27 февраля, 16.00<br />
<em>Продолжительность &#8211; 4 часа.</em></p>
<h3>&laquo;Секреты jQuery&raquo;</h3>
<blockquote><p>1. Как работает поисковой движок jQuery $(&#8216;&#8230;&#8217;).<br />
- Внутреннее устройство. Алгоритм поиска. No magic.<br />
- Почему некоторые очевидные запросы тормозят, и как их ускорять.<br />
- Расширение поискового движка, добавление своих фильтров.<br />
2. Система событий в jQuery.<br />
- Внутреннее устройство.<br />
- Слабо- и недокументированные фичи, отсутствующие в обычных javascript-событиях.<br />
- Влияние системы событий на быстродействие и DOM-манипуляции. Что тормозит и почему.<br />
- Обход утечек памяти.<br />
3. Фишки AJAX.<br />
- Особенные фичи AJAX в jQuery, которых нет в других библиотеках и полезные приемы работы с ними.<br />
4. $.изнутри.<br />
- Внутреннее устройство функции $. Что она делает быстро, а что &#8211; нет.<br />
- Создание плагинов. Внутренний механизм работы $.fn.plugin.<br />
5. jQuery UI.<br />
- Обзор и устройство jQuery UI.<br />
- Написание собственных виджетов. Объявление, вызов методов и т.п. Примеры.<br />
- Приемы для более удобной работы с виджетами.<br />
6. Профайлинг jQuery-приложения<br />
- Как из каши $(вызовов) получить читаемый профиль.<br />
7. Дополнительно.<br />
- Общий обзор библиотеки jQuery, ее сильных и слабых мест. Сравнение с другими фреймворками. Новое в jQuery 1.4.</p></blockquote>
<p>Мастер-класс посвящен слабо документированным особенностям и устройству фреймворка jQuery. Это не вводный курс. Знакомство и опыт работы с фреймворком jQuery &#8211; обязательны.<br />
Москва: воскресенье, 21 февраля, 16.00<br />
Санкт-Петербург: воскресенье, 28 февраля, 16.00<br />
<em>Продолжительность &#8211; 3 часа.</em><br />
<strong>On-line</strong>: суббота, 27 февраля, 20.00-21.50 и воскресенье, 28 февраля, 20.00-21.50</p>
<p><strong><a href="http://javascript.ru/mk">Дополнительная информация, запись на мастер-классы »</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2010/117.html/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Некоторые концепции JavaScript, необходимые для эффективного применения jQuery.</title>
		<link>http://www.linkexchanger.su/2009/90.html</link>
		<comments>http://www.linkexchanger.su/2009/90.html#comments</comments>
		<pubDate>Wed, 20 May 2009 12:08:27 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/90.html</guid>
		<description><![CDATA[Эта статья написана &#171;по мотивам&#187; одной из глав книги &#171;jQuery &#8211; подробное руководство по продвинутому JavaScript&#187;. Информация, содержащаяся в этой главе, показалась мне настолько полезной, что я не мог не поделиться ей. Здесь не освещаются все концепции языка &#8211; внимание уделено лишь тем, понимание которых поможет эффективнее овладеть библиотекой jQuery.
Итак, первое на чем мы остановим [...]]]></description>
			<content:encoded><![CDATA[<p>Эта статья написана &laquo;по мотивам&raquo; одной из глав книги &laquo;jQuery &#8211; подробное руководство по продвинутому JavaScript&raquo;. Информация, содержащаяся в этой главе, показалась мне настолько полезной, что я не мог не поделиться ей. Здесь не освещаются все концепции языка &#8211; внимание уделено лишь тем, понимание которых поможет эффективнее овладеть библиотекой jQuery.<span id="more-90"></span></p>
<p>Итак, первое на чем мы остановим свое внимание &#8211; это определение и работа с функциями, с использованием подхода при котором они являются обычными объектами JavaScript. Но для того, чтобы к этому подойти, давайте сначала посмотрим, как создаются</p>
<h2>Объекты в JavaScript</h2>
<pre class="brush: jscript;">var card = new Object();</pre>
<p>Весьма просто, но совсем неинтересно, поскольку наш объект не содержит никакой информации. Давайте исправим это:</p>
<pre class="brush: jscript;">var card = new Object();
card.firstname = 'Ivan';
card.lastname = 'Ivanov';
card.year = '1974';
card.employed = new Date(2004,1,12);</pre>
<p>Это уже что-то полезное &#8211; создав новый экземпляр объекта, мы присвоили его переменной <strong>card</strong> и наполнили свойствами различных типов: <em>строка</em>, <em>число</em>, и <em>дата</em>.</p>
<p>Что же получается? Получается, что объект JavaScript &#8211; это набор свойств, каждое из которых состоит из имени и значения. При этом в качестве имени может выступать только строка, а вот значением (и это важный момент!!!) может быть и строка, и число, и массив, и конечно функция&#8230;</p>
<p><strong>Вывод:</strong> <em>основная цель экземпляра объекта &#8211; служить контейнером для именованных наборов других объектов.</em></p>
<p>Давайте немного усложним наш код, который мы используем в качестве примера:</p>
<pre class="brush: jscript;">var card = new Object();
card.firstname = 'Ivan';
card.lastname = 'Ivanov';
card.year = '1974';
card.employed = new Date(2004,1,12);
var phone = new Object();
phone.home = '(495)353-5353';
phone.mobile = '(903)261-1777';
card.phone = phone;</pre>
<p>мы создали еще один объект, который содержит номера телефонов и сделали этот объект значением свойства нашего первого объекта.</p>
<p>А теперь попробуем записать все тоже самое в литеральной нотации, плавно двигаясь к тому синтаксису, который присутствует в jQuery-коде практически повсеместно.</p>
<pre class="brush: jscript;">var card = {
  firstname : 'Ivan',
  lastname  : 'Ivanov',
  year      : '1974',
  employed  : new Date(2004,1,12),
  phone     : {
    home   : '(495)353-5353',
    mobile : '(903)261-1777'
  }
};</pre>
<p>Вот собственно такая форма записи и называется <strong>JSON</strong> &#8211; посмотрите, насколько проста и понятна структура:</p>
<p>- объект &#8211; пара фигурных скобок<br />
- свойства перечислены внутри скобок, через запятую<br />
- каждое свойство &#8211; это пара состоящая из имени и значения, разделенных двоеточием.</p>
<p>Давайте теперь отметим для себя еще один очень важный момент, воспользовавшись следующим простым примером:</p>
<pre class="brush: jscript;">var someVar = 'В лесу родилась елочка!';</pre>
<p>Простейшая инструкция, в которой переменной присваивается экземпляр объекта String. Если мы попробуем выполнить:</p>
<pre class="brush: jscript;">alert(someVar);</pre>
<p>увидим то, что и ожидали &#8211; сенсационное сообщение о том, что в лесу родилась елочка. Как Вы думаете, что мы увидим после выполнения следующего кода?</p>
<pre class="brush: jscript;">alert(window.someVar);</pre>
<p>Можете попробовать, но сразу скажу, что в результате получится абсолютно тоже самое сообщение! Поскольку инструкции эквивалентны, то какой же вывод из этого можно сделать?</p>
<p>Правильно! Когда ключевое слово <em>var</em> используется за пределами какой-либо функции, на глобальном уровне, оно является всего лишь ссылкой на свойство объекта <em>window</em>.</p>
<p>Ну вот, с объектами мы более-менее разобрались. Но давайте кратко сформулируем то, о чем мы говорили. Итак:</p>
<p>- объект в JavaScript &#8211; это неупорядоченный набор свойств;<br />
- свойство состоит из имени и значения;<br />
- объекты можно объявлять с помощью литералов;<br />
- глобальные переменные &#8211; есть свойства объекта window;</p>
<h2>Функция как объект JavaScript</h2>
<p>Вот теперь мы готовы к тому, чтобы вернуться к тому утверждению, что функции в JavaScript можно рассматривать как обычные объекты. Почему же в JavaScript функцию можно считать обычным объектом? Давайте возьмем для сравнения объекты других типов, например <em>String</em> или <em>Number</em>.</p>
<p>Если объекты <em>String</em> или <em>Number</em> определяются соответствующими конструкторами, то функции также определяются конструктором, в данном случае конструктором <em>Function</em>. Точно также, как и другие объекты функции могут:</p>
<p>- присваиваться переменным и свойствам объектов<br />
- передаваться в виде параметров<br />
- возвращаться как результат других функций<br />
- создаваться с использованием литералов</p>
<p>Но есть на первый взгляд одно очень существенное отличие от тех же упомянутых объектов <em>String</em> или <em>Number</em> &#8211; у функции есть имя! Но это только на первый взгляд.</p>
<p>Посмотрим простенький пример:</p>
<pre class="brush: jscript;">function hello() {
  alert('Hello, world!');
}</pre>
<p>такая запись очень часто используется для создания глобальных функций, но это совершенно не означает, что мы только что создали функцию с именем <strong>hello</strong>. Вспомните наши примеры с ключевым словом <em>var</em>. Тут практически тоже самое, только в примере с функцией ключевое слово <em>function</em> автоматически создает экземпляр объекта и присваивает его свойству объекта <em>window</em>. А имя этого свойства совпадает с именем нашей функции. Т.е. мы могли бы написать так:</p>
<pre class="brush: jscript;">hello = function () {
  alert('Hello, world!');
}</pre>
<p>или даже так:</p>
<pre class="brush: jscript;">window.hello = function () {
  alert('Hello, world!');
}</pre>
<p>Это есть синтаксис <strong>литерала функции</strong> &#8211; привыкайте, в jQuery-коде Вы будете использовать такую форму записи очень часто. Но самый главный <strong>вывод, который мы должны сделать</strong> &#8211; <em>экземпляры Function являются значениями!!!, которые можно присвоить переменным, свойствам или параметрам, через которые на них можно ссылаться</em>.</p>
<h2>Функции обратного вызова</h2>
<p>Следующий шаг &#8211; попробуем передавать функцию в качестве параметра и тут же разберем одно из самых распространенных понятий &#8211; функция обратного вызова. Смотрим код:</p>
<pre class="brush: jscript;">function hello() {
  alert('Hello, word!');
}
setTimeout(hello,5000);</pre>
<p>Объявляем функцию с именем <strong>hello</strong> и устанавливаем таймер на 5 секунд. Смотрите, передача функции в качестве параметра ничем не отличается от передачи любого другого значения &#8211; в первом параметре мы передали функцию, а во втором &#8211; число. Когда время таймера истечет, будет вызвана функция <strong>hello</strong>. Поскольку метод <em>setTimeout()</em> делает вызов функции в нашем собственном программном коде &#8211; эту функцию называют <strong>функцией обратного вызова</strong>.</p>
<p>Однако есть более изящный способ записи этого кода:</p>
<pre class="brush: jscript;">setTimeout(function(){ alert('Hello, word!'); },5000);</pre>
<p>если функцию не требуется вызывать где-то в другом месте страницы, нет никакой необходимости создавать свойство <strong>hello</strong> в объекте <em>window</em>. Такой подход будет очень часто встречаться в программном коде jQuery.</p>
<h2>Реализация this в JavaScript</h2>
<p>В объектно-ориентированных языках основанных на классах, указатель <strong>this</strong>, как правило, ссылается на экземпляр класса, в пределах которого был объявлен метод. Реализация <strong>this</strong> в JavaScript отличается едва различимым, но очень существенным образом. В JavaScript, где функции являются обычными объектами (мы говорили об этом выше), они не объявляются как часть чего-либо. <em>Объект, на который ссылается this, называется контекстом функции и определяется не тем, как функция объявляется, а тем как она вызывается.</em> Это значит, что функция может иметь различный контекст в зависимости от того, как она была вызвана.</p>
<p>Давайте вернемся к примеру и немного дополним его:</p>
<pre class="brush: jscript;">var card = {
  firstname : 'Ivan',
  lastname  : 'Ivanov',
  year      : '1974',
  employed  : new Date(2004,1,12),
  phone     : {
    home    : '(495)353-5353',
    mobile  : '(903)261-1777'
  },
  showData   : function() {
    return this.lastname+'
            '+this.firstname+'
            '+this.phone.mobile;
  }
};</pre>
<p>К первоначальному коду мы добавили свойство с именем <strong>showData</strong>, которое ссылается на экземпляр <em>Function</em>. Если теперь вызвать функцию через свойство:</p>
<pre class="brush: jscript;">alert(card.showData());</pre>
<p>то в качестве контекста функции будет установлен экземпляр объекта на который указывает <strong>card</strong>. В результате мы увидим следующее:</p>
<blockquote><p><strong>Ivanov Ivan (903)261-1777</strong></p></blockquote>
<p>Ну это все вполне естественно, гораздо более интересен следующий пример. JavaScript позволяет четко установить, что будет использоваться в качестве контекста функции. Вызывая функцию с помощью методов <em>call()</em> или <em>apply()</em> экземпляра <em>Function</em>, мы можем передать в качестве контекста все, что угодно.</p>
<pre class="brush: jscript;">var obj1 = { myProperty: 'object 1' };
var obj2 = { myProperty: 'object 2' };
var obj3 = { myProperty: 'object 3' };
window.myProperty = 'object window';

function showProperty() {
  return this.myProperty;
}

obj1.identifyMe = showProperty;

alert(showProperty());
alert(obj1.identifyMe());
alert(showProperty.call(obj2));
alert(showProperty.apply(obj3));</pre>
<p>Определили три простых объекта, у каждого из которых есть свойство <strong>myProperty</strong>. Добавили свойство <strong>myProperty</strong> в экземпляр объекта <em>window</em>. Определили глобальную функцию, которая возвращает значение свойства <strong>myProperty</strong> для любого объекта, используемого в качестве контекста этой функции. И еще присвоили эту же самую функцию свойству с именем i<strong>dentifyMe</strong> объекта <strong>obj1</strong>.</p>
<p>Дальше самое интересное &#8211; четыре раза мы вызываем один и тот же экземпляр функции другим способом и посмотрите, что получается:<br />
- в первом случае вызываем функцию как глобальную и контекстом функции является экземпляр объекта <em>window</em> о чем свидетельствует текст в окне предупреждения &#8211; &laquo;<strong>object window</strong>&laquo;.<br />
- во втором случае вызываем функцию как свойство объекта <strong>obj1</strong> и контекстом функции становится этот объект. Текст в окне предупреждения &#8211; &laquo;<strong>object 1</strong>&laquo;.<br />
- в третьем случае используем метод <em>call()</em> объекта <em>Function</em> и контекстом функции становится объект, переданный методу <em>call()</em> в качестве первого параметра. Текст в окне предупреждения &#8211; &laquo;<strong>object 2</strong>&laquo;.<br />
- наконец в четвертом случае используем метод <em>apply()</em>, передавая ему в качестве первого аргумента <strong>obj3</strong>, и получаем текст в окне предупреждения &#8211; &laquo;<strong>object 3</strong>&laquo;.</p>
<blockquote><p><a href="http://www.linkexchanger.su/jquery_articles/someConcepts1.html" target="_blank">Пример</a> можно открыть в отдельном окне.</p></blockquote>
<p><strong>Вывод такой:</strong> <em>функция fn действует как метод объекта ob, когда объект ob выступает в качестве контекста при вызове функции fn.</em></p>
<h2>Что такое замыкание?</h2>
<p><strong>Замыкание (closure)</strong> &#8211; это экземпляр <em>Function</em> вместе с локальными переменными из его окружения, необходимыми для выполнения.</p>
<p>Функция при объявлении может ссылаться на любые переменные, находящиеся в области ее видимости на момент объявления. Эти переменные будут достижимы для функции даже после того, как текущее положение в объявлении выйдет из области видимости, замыкая объявление.</p>
<p>Лучше всего пояснить это на простом примере (здесь уже используем библиотеку jQuery):</p>
<pre class="brush: jscript;">$(function(){
  var local = 1;
  window.setInterval(function(){
    $('#result').append(new Date()+
                ' значение local = '+local+'   ');
    local++;
  },5000);
});</pre>
<p>После загрузки DOM объявляем переменную <strong>local</strong> и присваиваем ей числовое значение 1. С помощью метода <em>setInterval()</em> взводим таймер, который будет срабатывать каждые 5 секунд. В качестве функции обратного вызова для таймера, определяем функцию, которая каждые пять секунд будет добавлять текущее время и значение переменной <strong>local</strong>. Кроме того, при каждом срабатывании таймера значение переменной local должно увеличиваться на единицу.</p>
<blockquote><p><a href="http://www.linkexchanger.su/jquery_articles/someConcepts2.html" target="_blank">Пример</a> можно открыть в отдельном окне.</p></blockquote>
<p>Можно было подумать, что поскольку функция обратного вызова запустится только лишь спустя 5 секунд после готовности DOM, то во время выполнения функции переменная <strong>local</strong> окажется неопределенной, ведь код в котором определяется <strong>local</strong> выходит из области видимости, как только обработчик события готовности DOM заканчивает свою работу.</p>
<p>Тем не менее этот код прекрасно работает, благодаря замыканию, созданному при объявлении функции и включающему в себя переменную <strong>local</strong>. Замыкание остается в области видимости функции на протяжении всего жизненного цикла.</p>
<p>При работе с jQuery (особенно при использовании возможностей ajax) Вы будете довольно часто сталкиваться с замыканиями. Поэтому необходимо обратить внимание на еще одну <strong>важную особенность замыканий</strong> &#8211; <em>контекст функции никогда не является частью замыкания.</em> Опять же на примере будет гораздо понятнее.</p>
<p>Посмотрите такой код:</p>
<pre class="brush: jscript;">this.id = 'someID';
$('*').each(function(){
  alert(this.id);
});</pre>
<p>Мы могли бы ожидать, что в окне предупреждения для каждого элемента будет раз за разом отображаться значение <strong>someID</strong>, однако это совсем не так. Мы увидим окно предупреждений столько раз, сколько элементов будет отобрано в объект jQuery и каждый раз будет отображаться значение атрибута <strong>id</strong> следующего элемента (или пустое окно предупреждения, если такого атрибута нет). Это происходит потому, что у каждого вызова функции собственный контекст, и в данном случае контекстом является элемент из объекта jQuery.</p>
<p>Давайте немного исправим пример:</p>
<pre class="brush: jscript;">this.id = 'someID';
var someVar = this;
$('*').each(function(){
  alert(someVar.id);
});</pre>
<p>Переменная <strong>someVar</strong> становится частью замыкания и будет доступна внутри функции обратного вызова. Такой код будет раз за разом выдавать в окне предупреждения одно и тоже значение &#8211; <strong>someID</strong>.</p>
<p>Ну, вот вроде бы и все. Осталось сказать, что если твердо усвоить все эти понятия, то создавать эффектные и эффективные сценарии на JavaScript с использованием jQuery будет гораздо проще&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/90.html/feed</wfw:commentRss>
		<slash:comments>50</slash:comments>
		</item>
		<item>
		<title>Что такое Canvas</title>
		<link>http://www.linkexchanger.su/2009/86.html</link>
		<comments>http://www.linkexchanger.su/2009/86.html#comments</comments>
		<pubDate>Tue, 14 Apr 2009 05:49:17 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[canvas]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/86.html</guid>
		<description><![CDATA[К будущему надо готовиться, потому что оно наступает быстрее, чем мы его ждем. Поэтому сегодня расскажу о canvas — элементе спецификации Web Applications 1.0, которая со временем вероятно воплотится в язык HTML5. Сама спецификация подготовлена рабочей группой WHAT-WG (Web Hypertext Application Technology Working Group) и добавляет ряд нововведений в HTML и DOM.
Однако начнем с примера [...]]]></description>
			<content:encoded><![CDATA[<p>К будущему надо готовиться, потому что оно наступает быстрее, чем мы его ждем. Поэтому сегодня расскажу о canvas — элементе спецификации Web Applications 1.0, которая со временем вероятно воплотится в язык HTML5. Сама спецификация подготовлена рабочей группой WHAT-WG (Web Hypertext Application Technology Working Group) и добавляет ряд нововведений в HTML и DOM.<br />
Однако начнем с примера использования <strong>canvas</strong>&#8230;<span id="more-86"></span><br />
<iframe src="http://www.linkexchanger.su/examples_2009/canvas/canvas.html" style="border: medium none " width="420" height="180"></iframe><br />
Не знаю как кого, а меня пример впечатлил&#8230;</p>
<p>Итак, элемент Canvas предназначен для создания bitmap изображения при помощи JavaScript, т.е. мы получаем возможность создавать графические формы, рисовать линии, вращать изображения.</p>
<p>Такие возможности подстегнули производителей браузеров к включению API canvas в последние версии своих продуктов &#8211; FireFox, Opera, Chrome, Safari поддерживают тэг canvas. Как всегда неприятным исключением оказался горячо нелюбимый всеми Internet Explorer &#8211; не то что в 6 и 7 версиях, даже в 8 версии поддержка тэга canvas не планируется.</p>
<p>Однако не все так безнадежно как могло бы показаться &#8211; на помощь пришла компания Google, реализовав для IE полноценный API Canvas. По сути это небольшой js-файл, подключая который для браузеров IE можно заставить их &laquo;понимать&raquo; тэг canvas. Найти этот файл можно тут:<br />
<a href="http://code.google.com/p/explorercanvas/" target="_blank">http://code.google.com/p/explorercanvas/</a></p>
<p>Но вернемся к нашему примеру. Для того, чтобы изобразить такие часики на своей страничке понадобится подключить в разделе HEAD файл excanvas.js &#8211; это для ого, чтобы заставить браузеры IE понимать canvas:</p>
<pre class="brush: jscript;">&lt;!--[if IE]&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;excanvas.js&quot;&gt;&lt;/script&gt;
&lt; ![endif]--&gt;</pre>
<p>В body добавим следующую разметку:</p>
<pre class="brush: xml;">&lt;canvas id=&quot;canvas&quot; height=&quot;150&quot; width=&quot;150&quot;&gt;&lt;/canvas&gt;</pre>
<p>И самое главное &#8211; JS-код, который и рисует сами часики:</p>
<pre class="brush: jscript;">
// ожидаем загрузку
window.onload = function(){
  // рисуем часы
  clock();
  // через каждую секунду
  // часы перерисовываются
  setInterval(clock, 1000);
}
//
function clock() {
  // получаем текущие дату и время
  var now = new Date();
  var sec = now.getSeconds();
  var min = now.getMinutes();
  var hr = now.getHours();

  // получаем контекст canvas
  var ctx = document
  .getElementById(&quot;canvas&quot;)
  .getContext(&quot;2d&quot;);

  // сохраняем состояние
  ctx.save();
  // инициализируем холст
  ctx.clearRect(0,0,150,150);
  // рисуя в точке 0,0 фактически
  // рисуем в точке 75,75
  ctx.translate(75,75);
  // при рисовании линии в 100px
  // фактически рисуем линию в 40px
  ctx.scale(0.4,0.4);
  // начинаем вращать с 12:00
  ctx.rotate(-Math.PI/2);

  // инициализируем свойства рисунка
  // контуры рисуем черным
  ctx.strokeStyle = &quot;black&quot;;
  // заливка тоже черная
  ctx.fillStyle = &quot;black&quot;;
  // ширина линии 8px
  ctx.lineWidth = 8;
  // будем рисовать по кругу
  ctx.lineCap = &quot;round&quot;;

  // начинаем рисовать часовые метки
  // сохраняем предыдущее состояние
  ctx.save();
  ctx.beginPath();
  // для каждого часа
  for(var i = 0; i &lt; 12; i++) {
  	// поворачиваем на 1/12
    ctx.rotate(Math.PI/6);
    // перемещаем курсор
    ctx.moveTo(100,0);
    // рисуем черточку 20px
    ctx.lineTo(120,0);
  }
  ctx.stroke();
  ctx.restore();

  // сохраняем состояние
  ctx.save();
  // ставим ширину линии 5px
  ctx.lineWidth = 5;
  ctx.beginPath();
  // рисуем минутные метки
  // для каждой минуты
  for(var i = 0; i &lt; 60; i++) {
  	// кроме тех, что совпадут
  	// с часами
    if(i%5 != 0) {
      // перемещаем курсор
      ctx.moveTo(117,0);
      // рисуем черточку 3px
      ctx.lineTo(120,0);
    }
    // вращаем холст на 1/60
    ctx.rotate(Math.PI/30);
  }
  ctx.stroke();
  ctx.restore();

  // сохраняем состояние
  ctx.save();
  // начинаем рисовать часовую стрелку
  // вращаем холст на текущую позицию
  ctx.rotate((Math.PI/6)*hr +
             (Math.PI/360)*min +
             (Math.PI/21600)*sec);
  // устанавливаем ширину линии 14px
  ctx.lineWidth = 14;

  ctx.beginPath();
  // сдвигаем курсор несколько назад
  // стобы было похоже на стрелку
  ctx.moveTo(-20,0);
  // рисуем линию почти до часовых меток
  ctx.lineTo(80,0);
  ctx.stroke();
  ctx.restore();

  // сохраняем состояние
  ctx.save();
  // начинаем рисовать минутную стрелку
  // вращаем холст на текущую позицию
  ctx.rotate((Math.PI/30)*min +
             (Math.PI/1800)*sec);
  // ширина линии 10px
  ctx.lineWidth = 10;
  ctx.beginPath();
  // двигаем курсор
  ctx.moveTo(-28,0);
  // рисуем линию
  ctx.lineTo(112,0);
  ctx.stroke();
  ctx.restore();

  // сохраняем состояние
  ctx.save();
  // начинаем рисовать секундную стрелку
  // вращаем холст на текущую позицию
  ctx.rotate(sec * Math.PI/30);
  // контур и заливка красного цвета
  ctx.strokeStyle = &quot;#D40000&quot;;
  ctx.fillStyle = &quot;#D40000&quot;;
  // ширина линии 6px
  ctx.lineWidth = 6;
  ctx.beginPath();
  // двигаем курсор
  ctx.moveTo(-30,0);
  // рисуем линию
  ctx.lineTo(83,0);
  ctx.stroke();
  ctx.restore();

  // сохраняем состояние
  ctx.save();
  // рисуем внешнюю окружность
  // шириной 14px
  ctx.lineWidth = 14;
  // синим цветом
  ctx.strokeStyle = &quot;#325FA2&quot;;
  ctx.beginPath();
  // рисуем окружность, отступающую
  // от центра на 142px
  ctx.arc(0,0,142,0,Math.PI*2,true);
  ctx.stroke();
  ctx.restore();

  ctx.restore();
}</pre>
<blockquote><p>Вы можете <a href="http://www.linkexchanger.su/examples_2009/canvas/canvas.zip">скачать файлы</a> этого примера. Можно <a href="http://www.linkexchanger.su/examples_2009/canvas/canvas.html" target="_blank">открыть пример</a> в новом окне и посмотреть исходный код.</p></blockquote>
<p>В заключение я приведу несколько очень полезных ссылок, для тех, кто заинтересовался.<br />
<a href="https://developer.mozilla.org/En/Canvas_tutorial">Canvas Tutorial</a> &#8211; туториал (на английском конечно), но там Вы найдете еще впечатляющие примеры.<br />
<a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#the-canvas-element">The canvas element</a> &#8211; подраздел спецификации HTML5, касающийся элемента canvas (и тоже ес-но на английском).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/86.html/feed</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>jQuery &#8211; подробное руководство по продвинутому JavaScript</title>
		<link>http://www.linkexchanger.su/2008/74.html</link>
		<comments>http://www.linkexchanger.su/2008/74.html#comments</comments>
		<pubDate>Thu, 25 Dec 2008 03:00:08 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/74.html</guid>
		<description><![CDATA[Перед Новым Годом &#8211; только хорошие новости! Хотя, может быть для кого-то это уже и не новость. Итак, хорошая новость состоит в том, что в интернет-магазинах в продаже появилась книга &#171;jQuery &#8211; подробное руководство по продвинутому JavaScript&#187;, которая является переводом знаменитой &#171;jQuery in action&#187;. Книга вышла в издательстве &#171;Символ-Плюс&#187; г. Санкт-Петербург. Уже приобрел и почитал. [...]]]></description>
			<content:encoded><![CDATA[<p>Перед Новым Годом &#8211; только хорошие новости! Хотя, может быть для кого-то это уже и не новость. Итак, хорошая новость состоит в том, что в интернет-магазинах в продаже появилась книга <strong>&laquo;jQuery &#8211; подробное руководство по продвинутому JavaScript&raquo;</strong>, которая является переводом знаменитой <strong>&laquo;jQuery in action&raquo;</strong>. Книга вышла в издательстве &laquo;Символ-Плюс&raquo; г. Санкт-Петербург. Уже приобрел и почитал. Это конечно не совсем справочное руководство, как представляет книгу издательство, но для тех, кто хочет глубоко изучить jQuery, книга очень и очень пригодится.<span id="more-74"></span></p>
<ul style="float: right; width: 200px">
<li>Бер Бибо, Иегуда Кац</li>
<li>jQuery. Подробное руководство по продвинутому JavaScript</li>
<li>jQuery in Action</li>
<li>Серия: High tech</li>
<li>Издательство: Символ-Плюс, 2009 г.</li>
<li>Мягкая обложка, 384 стр.</li>
<li>ISBN   978-5-93286-135-6, 5-93286-135-5, 1-933988-35-5</li>
<li>Тираж: 2000 экз.</li>
<li>Формат: 70&#215;100/16</li>
</ul>
<p><img src="http://www.linkexchanger.su/wp-content/uploads/2008/12/jqueryinaction.jpg" alt="jQuery - подробное руководство по продвинутому JavaScript" /></p>
<p>Авторы книги &#8211; Бер Бибо (Bear Bibeault) и Иегуда Кац (Yehuda Katz). Бер Бибо &#8211; ветеран программирования, занимающийся этим уже 30 лет, Иегуда Кац &#8211; один из членов основной команды jQuery. Уже поэтому книга достойна пристального внимания.</p>
<p>Кроме того, книга очень хорошо организована. Начинается с введения в основы jQuery и тут же освещает основные концепции, которым следует библиотека. Рассматривается и философия jQuery, которая согласуется с принципом  &laquo;ненавязчевый JavaScript&raquo;. Рассказывается о принципах действия библиотеки jQuery.</p>
<p>Далее, как и следовало ожидать, освещается создание наборов элементов с использованием селекторов jQuery, работа со стилями, атрибутами и содержимым элементов, манипуляции элементами DOM и конечно же рассказано о событиях.</p>
<p>Освещено в книге и создание визуальных эффектов и конечно же механизмы взаимодействия с ajax. Есть также материалы о том, как создавать свои собственные модули и расширения.</p>
<p>Могу сказать, что для себя нашел в книге несколько довольно интересных &laquo;тонкостей&raquo; этой библиотеки. В общем, мое мнение &#8211; прочитать стоит, даже если Вы отлично ориентируетесь в мире jQuery.</p>
<p>Купить книгу можно в интернет-магазинах ozon.ru или books.ru &#8211; там она точно есть, может есть и где-нибудь еще.</p>
<p>С наступающим Новым 2009 Годом!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/74.html/feed</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Пользовательские интерфейсы: jQuery dialog &#8211; диалоговое окно.</title>
		<link>http://www.linkexchanger.su/2008/32.html</link>
		<comments>http://www.linkexchanger.su/2008/32.html#comments</comments>
		<pubDate>Fri, 22 Feb 2008 07:10:04 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[draggable]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[resizible]]></category>
		<category><![CDATA[диалог]]></category>
		<category><![CDATA[интерфейс]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/32.html</guid>
		<description><![CDATA[Разберем еще один пример для библиотеки jQuery &#8211; построение диалогового окна. При всей полезности этого плагина не могу не отметить, что по крайней мере в IE и Opera присутствуют небольшие огрехи (их можно увидеть и на сайте разработчиков), но они связаны скорее со стилевым оформлением, чем с работой самой библиотеки. В FireFox же и Netscape [...]]]></description>
			<content:encoded><![CDATA[<p>Разберем еще один пример для библиотеки jQuery &#8211; построение диалогового окна. При всей полезности этого плагина не могу не отметить, что по крайней мере в IE и Opera присутствуют небольшие огрехи (их можно увидеть и на сайте разработчиков), но они связаны скорее со стилевым оформлением, чем с работой самой библиотеки. В FireFox же и Netscape Navigator никаких проблем не наблюдалось. Поскольку штука получилась весьма полезная &#8211; разберем ее подробнее. <font color="#ff0000"><strong>Внимание! Эта статья устарела!</strong></font> Новую статью можно <a href="http://www.linkexchanger.su/2009/95.html">почитать здесь</a>.<span id="more-32"></span></p>
<p>Итак, что мы можем получить подключив несколько javascript-файлов, задав соответствующее стилевое оформление и написав вот такой небольшой кусочек кода.<code> </code></p>
<pre class="brush: jscript;">$(&quot;#example&quot;).dialog();</pre>
<p>Мы получаем диалоговое окно, которое можно перемещать по экрану в любом направлении. Мы можем менять размеры этого окна. И конечно, содержимое этого окна может быть вполне функциональным. Испытайте все это на примере.</p>
<blockquote><p>Принимайте во внимание, что пример демонстрируется во фрейме.</p></blockquote>
<p><iframe src="http://www.linkexchanger.su/example_jquery/dialog.html" style="border: medium none " width="420" height="420"></iframe></p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery/dialog.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p>В раздел HEAD понадобится подключить довольно много файлов: кроме самой библиотеки jQuery &#8211; jquery-1.2.1.js, файлы jquery.dimensions.js, ui.resizable.js, ui.draggable.js, ui.mouse.js и конечно <strong>ui.dialog.js</strong></p>
<pre class="brush: xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.2.1.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.dimensions.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.dialog.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.resizable.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.mouse.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.draggable.js&quot;&gt;&lt;/script&gt;</pre>
<p>В исходном коде примера Вы сможете посмотреть стилевую таблицу, отвечающую за отображение диалогового окна и при необходимости отредактировать ее под свой дизайн. Обращаю Ваше внимание на, то что имена классов менять нежелательно. В противном случае Вам придется самостоятельно править код в файле <strong>ui.dialog.js</strong>.</p>
<p>HTML-код не представляет собой ничего интересного &#8211; элемент <strong>div</strong>, который будет служить диалоговым окном с идентификатором и именем класса.</p>
<p>И наконец приведу полностью тот код, который отвечает за диалоговое окно.</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  $(&quot;#example&quot;).dialog({
    title: &quot;Пример диалогового окна&quot;,
    width: 250,
    height: 150,
    resizable: true,
    draggable: true,
    position: &quot;center&quot;,
    buttons: {
      &quot;Отправить&quot;: function() {
        alert(&quot;Вы нажали кнопку Отправить&quot;);
      },
      &quot;Закрыть&quot;: function() {
        $(this).dialog(&quot;close&quot;);
        alert(&quot;Вы нажали кнопку Закрыть&quot;);
      }
    }
  });
});
&lt;/script&gt;</pre>
<p>Элемент с идентификатором <strong>#example</strong> будет служить диалоговым окном. В файле <strong>ui.dialog.js</strong> большинство опций заданы по умолчанию, мы же для примера попробуем переопределить большинство из них.<br />
<strong>title: &#8216;Пример диалогового окна&#8217;</strong> &#8211; задаем название диалогового окна.<br />
<strong>width: 250</strong> &#8211; ширина окна в px.<br />
<strong>height: 150</strong> &#8211; высота окна в px.<br />
<strong>resizable: true</strong> &#8211; диалоговое окно может (или false &#8211; не может) изменять свои размеры.<br />
<strong>draggable: true</strong> &#8211; диалоговое окно может (или false &#8211; не может) перемещаться по экрану.<br />
<strong>position: center</strong> &#8211; начальное положение окна на экране. Доступны значения center, left, top.<br />
<strong>buttons</strong> &#8211; об этом несколько подробнее. Эта опция определяет кнопки, которые понадобится отображать в диалоге. Определяются они парами ключ/значение, где ключ &#8211; это текст, который необходимо отобразить на кнопке, а в качестве значения может выступать функция, которая должна быть вызвана при клике на соответствующую кнопку.</p>
<p>Вот собственно и все. А внутри диалогового окна можно предусмотреть то, что угодно Вам. Будь то авторизационная форма или форма для отправки e-mail с сайта, или еще что-то&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/32.html/feed</wfw:commentRss>
		<slash:comments>61</slash:comments>
		</item>
		<item>
		<title>jQuery и Ajax: запросы</title>
		<link>http://www.linkexchanger.su/2008/34.html</link>
		<comments>http://www.linkexchanger.su/2008/34.html#comments</comments>
		<pubDate>Wed, 13 Feb 2008 05:55:48 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[ajax]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[jQuery документация]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/34.html</guid>
		<description><![CDATA[Разработчики библиотеки jQuery дали возможность использовать прелести ajax запросов без глубокого понимания процессов, которые происходят во время этого. Хорошо это или плохо, вопрос неоднозначный. Но, если такая возможность есть, давайте будем ей пользоваться и для начала ближе познакомимся с запросами ajax&#8230;
&#8230; вернее с тем, как их реализовать с помощью jQuery. Ниже я привожу перечень возможных [...]]]></description>
			<content:encoded><![CDATA[<p>Разработчики библиотеки jQuery дали возможность использовать прелести ajax запросов без глубокого понимания процессов, которые происходят во время этого. Хорошо это или плохо, вопрос неоднозначный. Но, если такая возможность есть, давайте будем ей пользоваться и для начала ближе познакомимся с запросами ajax&#8230;<span id="more-34"></span></p>
<p>&#8230; вернее с тем, как их реализовать с помощью jQuery. Ниже я привожу перечень возможных запросов и постараюсь все пояснять на примерах.</p>
<p><strong>load( url, [data], [callback] )</strong> &#8211; загружает HTML из файла и вставляет его в объекную модель документа (DOM). По умолчанию (без [data]) выполняется как GET-запрос, однако, если будут переданы данные, выполнится как POST-запрос. Начиная с версии jQuery 1.2 в url можно определить селектор jQuery, например так:</p>
<pre class="brush: jscript;">$(&quot;#example&quot;).load(&quot;/ li.cat-item&quot;);</pre>
<p>Результат выполнения Вы можете видеть ниже&#8230;.<br />
<iframe src="http://www.linkexchanger.su/example_jquery_ajax/load.html" style="border: medium none " width="420" height="70"></iframe><br />
При выполнении этого запроса, были выбраны все элементы li с классом cat-item в запрашиваемом url и загружены в элемент #example, т.е. мы загрузили меню &laquo;Рубрики&raquo; этого сайта.<br />
Здесь <strong>url</strong> &#8211; загружаемый url, <strong>data</strong> (опционально) &#8211; пары ключ/значение, которые могут быть переданы серверу, <strong>callback</strong> (опционально) &#8211; функция, которая может быть вызвана при окончании запроса (не требует обязательного успешного выполнения).<br />
Еще пара примеров:</p>
<pre class="brush: jscript;">$(&quot;#feeds&quot;).load(&quot;feeds.html&quot;);</pre>
<p>Загружает файл feeds.html в элемент с идентификатором feeds.</p>
<pre class="brush: jscript;">$(&quot;#feeds&quot;).load(&quot;feeds.php&quot;, {limit: 25}, function(){
  alert(&quot;Последние 25 записей загружены&quot;);
});</pre>
<p>То же самое, но дополнительно передается пара ключ/значение limit: 25 и задается функция, которая вызывается по окончании запроса.</p>
<p><strong>jQuery.get( url, [data], [callback] )</strong> &#8211; загружает страницу, используя GET-запрос. Это самый простой способ передачи GET-запроса серверу. Он допускает возможность использования одной функции, которая может быть вызвана при окончании запроса. Но в отличие от <strong>load</strong>, функция будет вызвана лишь при успешном выполнении запроса. Если необходимо определить функцию при ошибке запроса, лучше обратиться к $.ajax.</p>
<p>Несколько примеров:</p>
<pre class="brush: jscript;">$.get(&quot;test.php&quot;);</pre>
<p>Запрашивает test.php page, но игнорирует возвращаемый результат.</p>
<pre class="brush: jscript;">$.get(&quot;test.php&quot;, { name: &quot;Vasya&quot;, age: &quot;27&quot; } );</pre>
<p>Запрашивает test.php и передает дополнительные параметры, но также игнорирует возвращаемый результат.</p>
<pre class="brush: jscript;">$.get(&quot;test.php&quot;, function(data){
  alert(&quot;Данные загружены: &quot; + data);
});</pre>
<p>Передает результат запроса (без передачи параметров) к файлу test.php в alert (это может быть HTML или XML, зависит от того, что возвращает test.php).</p>
<pre class="brush: jscript;">$.get(&quot;test.php&quot;, { name: &quot;Vasya&quot;, age: &quot;27&quot; }, function(data){
  alert(&quot;Данные загружены: &quot; + data);
});</pre>
<p>Ну и полный набор: GET-запрос к файлу test.php с передачей каких-то параметров и возвращаемый результат передается в alert.</p>
<p><strong>jQuery.post( url, [data], [callback], [type] )</strong> &#8211; загружает страницу, используя POST-запрос. Все почти точно так же, как и в предыдущем случае, поэтому даже примеров приводить не буду. Обращу Ваше внимание разве что на еще один опциональный параметр &#8211; <strong>[type]</strong>. В нем можно определить тип передаваемых данных &#8211; JSON, XML и т.п.</p>
<p><strong>jQuery.getJSON( url, [data], [callback] )</strong> &#8211; загружает данные в формате JSON используя GET-запрос. Начиная с версии jQuery 1.2 Вы можете загружать данные в формате JSON, расположенные на другом домене. Пример загрузки фотографий с тэгом cat с <a href="http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&amp;tagmode=any&amp;format=json">Flickr</a> <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">JSONP</a> API.<br />
<iframe src="http://www.linkexchanger.su/example_jquery_ajax/getjson.html" style="border: medium none " width="420" height="190"></iframe></p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery_ajax/getjson.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p><strong>jQuery.getScript( url, [callback] )</strong> &#8211; загружает и выполняет JavaScript файлы, используя GET запрос. Начиная с версии jQuery 1.2 Вы можете загружать и выполнять JavaScript файлы с любого домена.</p>
<p>Вот пример:<br />
<iframe src="http://www.linkexchanger.su/example_jquery_ajax/getscript.html" style="border: medium none " width="420" height="140"></iframe></p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery_ajax/getscript.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p>Мы загрузили и можем выполнить файл <strong>jquery.color.js</strong> &#8211; официальный jQuery Color Animation плагин.</p>
<p><strong>jQuery.ajax( options )</strong> &#8211; загружает страницу используя HTTP запрос. <strong>$.ajax()</strong> принимает один аргумент &#8211; объект, состоящий из пар ключ/значение, которые использует, чтобы инициализировать и обработать ajax-запрос. Ниже приведен список возможных значений.</p>
<blockquote><p>Использование именно этой вспомогательной функции считается хорошим стилем, поскольку все остальные функции ($.get, $.post и т.п.) в конечном итоге используют именно $.ajax(options).</p></blockquote>
<p><strong>async</strong> &#8211; по умолчанию все запросы выполняются в асинхронном режиме (значение <strong>true</strong>). Если необходимо выполнить синхронный запрос, следует установить значение <strong>false</strong> для этой опции. Помните, что синхронный запрос может временно заблокировать браузер, запретив любые действия во время выполнения запроса.</p>
<p><strong>beforeSend</strong> &#8211; может содержать функцию, которая должна быть вызвана до передачи запроса. beforeSend &#8211; это Ajax Event (события рассмотрены в другой статье).</p>
<p><strong>cache</strong> &#8211; опция добавлена в jQuery 1.2. По умолчанию &#8211; <strong>true</strong>. Если установить в <strong>false</strong>, запрашиваемая страница не будет кэшироваться браузером.</p>
<p><strong>complete</strong> &#8211; определяет функцию, которая будет вызвана по окончанию запроса (успешного и ошибочного выполнения). Принимает два аргумента: объект XMLHttpRequest и строку, описывающую &laquo;успешность&raquo; запроса. <strong>complete</strong> &#8211; это Ajax Event (события рассмотрены в другой статье).</p>
<p><strong>contentType</strong> &#8211; при передаче данных серверу сообщает content-type. По умолчанию &#8211; application/x-www-form-urlencoded.</p>
<p><strong>data</strong> &#8211; данные, передаваемые на сервер. Могут быть объектом или строкой. Конвертируются в строку запроса, если уже не представляют собой строку. Добавляются в URL GET-запроса. Если используется объект, он должен представлять собой пары ключ/значение. Если значения представлены в виде массива, jQuery сериализует значения с некоторым ключом. Например: {foo:["bar1", "bar2"]} будет представлено как &laquo;&amp;foo=bar1&amp;foo=bar2&#8243;.</p>
<p><strong>dataType</strong> &#8211; строка, описывает тип данных, которые ожидаются в качестве ответа сервера. Если не определена, то jQuery сам попытается определить тип, основываясь на MIME-типе ответа сервера. Доступные типы:<br />
- <strong>xml</strong>: вернет XML документ, который может быть обработан через jQuery.<br />
- <strong>html</strong>: вернет HTML как plain text.<br />
- <strong>script</strong>: расценивает ответ как JavaScript и возвращает его как plain text.<br />
- <strong>json</strong>: расценивает ответ как данные в формате JSON и возвращает JavaScript объект.<br />
- <strong>jsonp</strong>: загружает данные в формате JSON используя <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">JSONP</a>. Необходимо дополнительно добавить &laquo;?callback=?&raquo; в конец строки запроса в URL, чтобы определить вызов. (Добавлено в jQuery 1.2).<br />
- <strong>text</strong>: строка plain text.</p>
<p><strong>error</strong> &#8211; определяет функцию, которая будет вызвана в случае неуспешного выполнения запроса.</p>
<p><strong>global</strong> &#8211; <strong>true</strong> или <strong>false</strong>. Вызывать или нет глобальные обработчики событий Ajax для этого запроса. Может быть использована для контроля различных Ajax событий. По умолчанию &#8211; <strong>true</strong>.</p>
<p><strong>ifModified</strong> &#8211; запрос будет успешным только в случае, если данные ответа изменились со времени последнего запроса. По умолчанию &#8211; <strong>false</strong>.</p>
<p><strong>processData</strong> &#8211; по умолчанию <strong>true</strong>. В опции <strong>data</strong> данные представлены в виде объекта, который преобразуется в строку запроса, подходящую для content-type по умолчанию &#8211; &laquo;application/x-www-form-urlencoded&raquo;. Если необходимо иное, установите опцию <strong>processData</strong> в <strong>false</strong>.</p>
<p><strong>success</strong> &#8211; указывается функция, которая будет вызвана в случае успешного завершения запроса. Функция принимает два аргумента: данные, возвращенные с сервера и отформатированные с учетом параметра <strong>dataType</strong> и строка, описывающая статус ответа.</p>
<p><strong>timeout</strong> &#8211; устанавливает локальный тайм-аут для запроса в миллисекундах. Отменяет глобальный тайм-аут для этого запроса, если тот определен через <strong>$.ajaxSetup</strong>.</p>
<p><strong>type</strong> &#8211; тип запроса, POST или GET. По умолчанию установлен GET. Типы запроса PUT или DELETE тоже могут быть использованы, но они поддерживаются не всеми браузерами.</p>
<p><strong>url</strong> &#8211; просто url запроса.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/34.html/feed</wfw:commentRss>
		<slash:comments>141</slash:comments>
		</item>
		<item>
		<title>jQuery Puzzle</title>
		<link>http://www.linkexchanger.su/2008/33.html</link>
		<comments>http://www.linkexchanger.su/2008/33.html#comments</comments>
		<pubDate>Mon, 11 Feb 2008 05:50:12 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[microformat]]></category>
		<category><![CDATA[puzzle]]></category>
		<category><![CDATA[микроформат]]></category>
		<category><![CDATA[пазлы]]></category>
		<category><![CDATA[пятнашки]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/33.html</guid>
		<description><![CDATA[Этот плагин к jQuery написал Ralf Stoltze. Мне очень понравилось &#8211; можно немного отдохнуть и расслабиться. И самое интересное &#8211; легко и просто можно подставить любую картинку, да хоть свою фотографию&#8230;
В общем расслабьтесь и поиграйте пока, а все пояснения потом, когда отдохнете.

Для того, чтобы сделать эту игрушку на своем сайте необходимо будет скачать библиотеку jQuery [...]]]></description>
			<content:encoded><![CDATA[<p>Этот плагин к jQuery написал <a href="http://www.2meter3.de/jqPuzzle/" target="_blank">Ralf Stoltze.</a> Мне очень понравилось &#8211; можно немного отдохнуть и расслабиться. И самое интересное &#8211; легко и просто можно подставить любую картинку, да хоть свою фотографию&#8230;<span id="more-33"></span></p>
<p>В общем расслабьтесь и поиграйте пока, а все пояснения потом, когда отдохнете.<br />
<iframe src="http://www.linkexchanger.su/example_jquery/puzzle.html" style="border: medium none " height="390" width="420"></iframe><br />
Для того, чтобы сделать эту игрушку на своем сайте необходимо будет <a href="http://jquery.com/" target="_blank">скачать библиотеку jQuery</a> и <a href="http://www.2meter3.de/jqPuzzle/#howto" target="_blank">плагин jqPuzzle</a>.</p>
<blockquote><p>В примере, <a href="http://www.linkexchanger.su/example_jquery/puzzle.zip">исходный код</a> которого Вы можете скачать на моем сайте, плагин jqPuzzle уже есть.</p></blockquote>
<p>В раздел<strong> HEAD</strong> страницы надо файлов javascript, вот так:</p>
<pre class="brush: xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.jqpuzzle.js&quot;&gt;&lt;/script&gt;</pre>
<p>и, если Вы используете не пример с моего сайта Вам надо будет подключить файл стилей (в моем примере стили включены в страницу).</p>
<pre class="brush: xml;">&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;jquery.jqpuzzle.css&quot; /&gt;</pre>
<p>Дальнейшая настройка возможна тремя различными способами:<br />
<strong>Способ первый, самый простой.</strong><br />
Просто добавляем на страницу понравившуюся картинку</p>
<pre class="brush: xml;">&lt;img src=&quot;image.jpg&quot; alt=&quot;Моя картинка&quot; class=&quot;jqPuzzle&quot; /&gt;</pre>
<p>и указываем имя класса <strong>class=&raquo;jqPuzzle&raquo;</strong>. Это все! Пятнашки будут работать! Правда все настройки будут установлены по умолчанию и Вам придется довольствоваться надписями на кнопках на английском языке.</p>
<p><strong>Способ второй, настройка с использованием CSS микроформатов.</strong><br />
Этот способ позволит настроить наиболее важные возможности. По сути, Вы просто добавляете второе (дополнительное) имя класса к уже существующему имени в тэге IMG, соблюдая следующий синтаксис:</p>
<pre class="brush: xml;">jqp[-LANGUAGE]-rROWS-cCOLS[-hHOLE][-sSHUFFLE_ROUNDS][-FLAGS]</pre>
<p>Здесь необходимо заменить символы в верхнем регистре реальными значениями. Все, что заключено в квадратные скобки можно не использовать. Приведу список возможных значений и примеры.</p>
<p><strong>LANGUAGE:</strong> код языка. По умолчанию &#8211; английский (en). Доступные языки &#8211; fr, de, pt и я дописал для русского &#8211; ru (это если использовать исходный код с моего сайта).<br />
<strong>ROWS:</strong> количество строк (от 3 до 9)<br />
<strong>COLS:</strong> количество столбцов (от 3 до 9)<br />
<strong>HOLE:</strong> позиция свободного места (от 1 до ROWS*COLS). По умолчанию &#8211; последняя позиция, в правом нижнем углу.<br />
<strong>SHUFFLE ROUNDS:</strong> количество циклов перемешивания. По умолчанию установлено 3.<br />
<strong>FLAGS:</strong> дополнительные опции с помощью которых можно настроить вид игрушки при загрузке страницы (перечислены ниже). Можно использовать любое количество флагов, в любом порядке.<br />
<strong>S:</strong> картинка будет перемешана при загрузке страницы.<br />
<strong>N:</strong> при загрузке цифры будут скрыты.<br />
<strong>A:</strong> скрывает кнопку &laquo;Перемешать&raquo;.<br />
<strong>B:</strong> скрывает кнопку &laquo;Оригинал&raquo;.<br />
<strong>C:</strong> скрывает кнопку &laquo;Цифры&raquo;.<br />
<strong>D:</strong> скрывает количество перемещений.<br />
<strong>E:</strong> скрывает количество секунд.</p>
<p>Несколько примеров, чтобы стало совсем понятно.</p>
<p>Пример 1: 3 строки, 5 колонок, &laquo;дырка&raquo; в позиции 5.</p>
<pre class="brush: xml;">&lt;img src=&quot;image.jpg&quot; alt=&quot;Моя картинка&quot; class=&quot;jqPuzzle jqp-r3-c5-h5&quot; /&gt;</pre>
<p>Пример 2: язык &#8211; немецкий, 5 строк, 5 колонок.</p>
<pre class="brush: xml;">&lt;img src=&quot;image.jpg&quot; alt=&quot;Моя картинка&quot; class=&quot;jqPuzzle jqp-de-r5-c5&quot; /&gt;</pre>
<p>Пример 3: язык &#8211; русский, 3 строки, 3 колонки, &laquo;дырка&raquo; в позиции 5, загружается со скрытыми цифрами и не отображается количество перемещений и время.</p>
<pre class="brush: xml;">&lt;img src=&quot;image.jpg&quot; alt=&quot;Моя картинка&quot; class=&quot;jqPuzzle jqp-ru-r3-c3-h5-NDE&quot; /&gt;</pre>
<p>думаю, что смысл здесь вполне понятен.</p>
<p><strong>Способ третий, использование синтаксиса jQuery. </strong></p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
    $(document).ready(function() {
        $(&quot;img&quot;).jqPuzzle();
    });
&lt;/script&gt;</pre>
<p>это простейший пример, с настройками по умолчанию, который сделает пятнашки из всех тэгов img на странице. Понятно, что это для примера, реально Вы можете использовать любой селектор. Вообще же <strong>jqPuzzle()</strong> может принимать два аргумента, первый из которых содержит настройки, а второй &#8211; надписи на кнопках. Выглядеть это может вот так:</p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  var myTexts = {
    shuffleLabel: &quot;Перемешать&quot;,
    toggleOriginalLabel: &quot;Оригинал&quot;,
    toggleNumbersLabel: &quot;Цифры&quot;,
    confirmShuffleMessage: &quot;Перемешать?&quot;,
    movesLabel: &quot;перемещений&quot;,
    secondsLabel: &quot;секунд&quot;
  }
  var settings = {
    rows: 4,
    cols: 4,
    hole: 16,
    shuffle: false,
    numbers: true,
    language: en
  }
  $(&quot;.jqPuzzle&quot;).jqPuzzle(settings, myTexts);
});
&lt;/script&gt;</pre>
<p>Что касается стилевого оформления &#8211; можно подправить все на свой вкус и цвет, естественно не трогая названий классов.</p>
<p>Согласитесь, прикольная игрушка?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/33.html/feed</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Пользовательские интерфейсы jQuery: tooltip &#8211; всплывающая подсказка.</title>
		<link>http://www.linkexchanger.su/2008/31.html</link>
		<comments>http://www.linkexchanger.su/2008/31.html#comments</comments>
		<pubDate>Fri, 08 Feb 2008 05:10:11 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tooltip]]></category>
		<category><![CDATA[интерфейс]]></category>
		<category><![CDATA[подсказка]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/31.html</guid>
		<description><![CDATA[Стандартные всплывающие подсказки выглядят надо сказать очень и очень бледно. С помощью библиотеки jQuery и небольшого плагина к ней мы легко сможем использовать всплывающие подсказки (tooltip) с пользовательским оформлением.
Для начала небольшой пример, который продемонстрирует, как такие подсказки могут выглядеть. Для примера выбраны обычная ссылка &#8211; элемент а и элемент input.
Пожалуйста, примите во внимание, что пример [...]]]></description>
			<content:encoded><![CDATA[<p>Стандартные всплывающие подсказки выглядят надо сказать очень и очень бледно. С помощью библиотеки jQuery и небольшого плагина к ней мы легко сможем использовать всплывающие подсказки (tooltip) с пользовательским оформлением.<span id="more-31"></span></p>
<p>Для начала небольшой пример, который продемонстрирует, как такие подсказки могут выглядеть. Для примера выбраны обычная ссылка &#8211; элемент <strong>а</strong> и элемент <strong>input</strong>.</p>
<blockquote><p>Пожалуйста, примите во внимание, что пример мне приходится демонстрировать во фрейме.</p></blockquote>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery/tooltip.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p>Файлы необходимые для реализации подключаем в раздел <strong>HEAD</strong>, их всего три &#8211; это сама библиотека jQuery, файл jquery.dimensions.js и файл для работы с подсказками <strong>jquery.tooltip.js</strong></p>
<pre class="brush: xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.2.1.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.dimensions.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.tooltip.js&quot;&gt;&lt;/script&gt;</pre>
<p>Дальше немного посмотрим на таблицу стилей, вернее на ту ее часть, где мы можем оформить нашу всплывающую подсказку.</p>
<pre class="brush: css;">#tooltip {
  position: absolute;
  z-index: 3000;
  width:250px;
  border: 1px solid #269;
  background-color: #48b;
  padding: 0;
  opacity: 0.85;
  color:#fff;
}
#tooltip h3 {
  background-color: #269;
  padding-left:5px;
  font-weight:bold;
  font-size:1.4em;
}
#tooltip div {
  padding-left:5px;
  padding-right:5px;
}</pre>
<p><strong>#tooltip</strong> &#8211; это и есть подсказка. Мы задаем абсолютное позиционирование, изымая таким образом подсказку из общего потока, а свойству <strong>z-index</strong> задаем заведомо большое значение, чтобы расположить подсказку &laquo;выше&raquo; элементов страницы. Дальше ничего сложного нет вообще нет. <strong>#tooltip h3</strong> &#8211; это заголовок подсказки, в элементе <strong>#tooltip div</strong> &#8211; текст подсказки. Вообще здесь важно только сохранить название идентификатора <strong>#tooltip</strong>, все остальное &#8211; на Ваш вкус.</p>
<p>Дальше приведу пример кода вызова наших всплывающих подсказок.</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  $(&quot;a, input&quot;).tooltip({
    track: true,
    delay: 100,
    showBody: &quot;::&quot;,
    opacity: 0.85
  });
});
&lt;/script&gt;</pre>
<p>Указываем элементы <strong>a</strong> и <strong>input</strong> в качестве элементов, для которых будут вызываться всплывающие подсказки. Но это еще не все. Необходимо, чтобы эти элементы имели атрибут <strong>title</strong>. Именно его значение используется для формирования подсказки.</p>
<p>Обратите внимание на опцию <strong>showBody</strong>. В ней можно указать разделитель. Часть до разделителя будет показана в заголовке подсказки, оставшаяся часть в теле подсказки.<br />
Опция <strong>track</strong>: если установлена в <strong>true</strong> &#8211; подсказка будет &laquo;привязана&raquo; к указателю мыши.<br />
<strong>delay</strong> &#8211; отсрочка появления подсказки в миллисекундах, по умолчанию установлено значение 250.<br />
<strong>opacity: 0.85</strong> &#8211; прозрачность (ну конечно не для IE).</p>
<p>Я как всегда привел лишь несколько из возможных опций, список их несколько шире. Найти полный перечень можно на сайте разработчиков.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/31.html/feed</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>Пользовательские интерфейсы jQuery: tablesorter &#8211; сортировка таблиц.</title>
		<link>http://www.linkexchanger.su/2008/30.html</link>
		<comments>http://www.linkexchanger.su/2008/30.html#comments</comments>
		<pubDate>Tue, 05 Feb 2008 21:10:18 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tablesorter]]></category>
		<category><![CDATA[интерфейс]]></category>
		<category><![CDATA[сортировка]]></category>
		<category><![CDATA[таблица]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/30.html</guid>
		<description><![CDATA[Сортировка таблиц &#8211; очень часто встречающаяся задача при построении пользовательских интерфейсов. Давайте посмотрим как легко и просто решается задача сортировки таблиц на стороне клиента с помощью библиотеки jQuery.
Испытайте этот небольшой пример, а затем мы разберем как это сделано.
Вы можете скачать исходный код примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.
В раздел [...]]]></description>
			<content:encoded><![CDATA[<p>Сортировка таблиц &#8211; очень часто встречающаяся задача при построении пользовательских интерфейсов. Давайте посмотрим как легко и просто решается задача сортировки таблиц на стороне клиента с помощью библиотеки jQuery.<span id="more-30"></span></p>
<p>Испытайте этот небольшой пример, а затем мы разберем как это сделано.</p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery/tablesorter.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p>В раздел <strong>HEAD</strong> понадобится подключить всего два файла: библиотеку jQuery &#8211; <strong>jquery-1.2.1.js</strong> и файл <strong>ui.tablesorter.js</strong></p>
<pre class="brush: xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.2.1.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.tablesorter.js&quot;&gt;&lt;/script&gt;</pre>
<p>В исходном коде примера Вы сможете посмотреть стилевую таблицу, отвечающую за отображение календаря и при необходимости отредактировать ее под свой дизайн. Эта часть кода выделена комментариями /* Стили для таблицы */.</p>
<p>HTML-код не представляет собой ничего интересного &#8211; это обычная таблица. Обращу внимание разве что на необходимость использования тэгов <strong>thead</strong> и <strong>tbody</strong>.</p>
<p>И наконец приведу очень простой код, который будет вызывать UI Tablesorter:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  $(&quot;#example&quot;).tablesorter({
	widgets: [&quot;zebra&quot;],
	sortList:[[1,0]]
  });
});
&lt;/script&gt;</pre>
<p>Таблица с идентификатором <strong>#example</strong> будет сортируемой. Большинство опций сортировки задано по умолчанию в самом файле <strong>ui.tablesorter.js</strong>, но мы легко можем их переопределить.<br />
<strong>widgets: ["zebra"]</strong> &#8211; используем &laquo;фирменный&raquo; виджет, чтобы чередовать цвет строк в таблице.<br />
<strong>sortList:[[1,0]]</strong> &#8211; задаем сортировку по умолчанию (при загрузке). В этом примере &#8211; сортировка второго столбца по возрастанию (первая цифра &#8211; порядковый номер столбца, вторая порядок сортировки, где 0 &#8211; по возрастанию, 1 &#8211; по убыванию). Здесь можно задавать сортировку и по нескольким столбцам сразу. Например: <strong>sortList:[[1,0], [0,1]]</strong> &#8211; сначала второй столбец сортируется по возрастанию, а затем первый &#8211; по убыванию&#8230;</p>
<p>Приведу еще пару полезных опций.<br />
<strong>sortMultisortKey</strong> &#8211; по умолчанию задано значение <strong>shiftKey</strong>, т.е. щелкая мышью по заголовку столбца при нажатой клавише Shift можно выполнять сортировку по нескольким столбцам. Естественно клавишу можно переопределить. Например так: <strong>sortMultiSortKey: &laquo;ctrlKey&raquo;</strong>. Теперь можно работать через клавишу <strong>Ctrl</strong>.<br />
<strong>headers</strong> &#8211; с помощью этой опции можно запретить сортировку по отдельным столбцам. Например: <strong>headers: { 4: { sorter: false} }</strong> запретит сортировку пятого столбца.</p>
<p>Весь список опций есть на сайте разработчиков библиотеки, а я буду благодарен, если найдете возможность оставить свои отзывы&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/30.html/feed</wfw:commentRss>
		<slash:comments>66</slash:comments>
		</item>
	</channel>
</rss>

