<?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>Seleckis.lv :: журнал Никиты Селецкого &#187; JavaScript</title>
	<atom:link href="http://www.seleckis.lv/category/journal/javascript/feed" rel="self" type="application/rss+xml" />
	<link>http://www.seleckis.lv</link>
	<description></description>
	<lastBuildDate>Tue, 01 Jun 2010 05:46:59 +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>Min-width и max-width в IE6 с помощью expression</title>
		<link>http://www.seleckis.lv/journal/browsers/min-width-i-max-width-v-ie6-s-pomoschyu-expression</link>
		<comments>http://www.seleckis.lv/journal/browsers/min-width-i-max-width-v-ie6-s-pomoschyu-expression#comments</comments>
		<pubDate>Thu, 06 Aug 2009 08:52:17 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Брaузеры]]></category>

		<guid isPermaLink="false">http://seleckis.lv/?p=1690</guid>
		<description><![CDATA[Уже писали много раз, просто приведу свой код.
В JavaScript-файле размещаем такую функцию:

function width&#40;min,max&#41;&#123;
	w = document.documentElement.clientWidth;
	return &#40;w &#60;= min&#41; ? min + &#34;px&#34; : &#40;&#40;w &#62;= max&#41; ? max + &#34;px&#34; : &#34;auto&#34;&#41;;
&#125;

Функция всего лишь принимает значения максимальной и минимальной ширины, проверяет текущую ширину документа и возвращает значение:

Если ширина документа меньше минимальной ширины, то возвращается минимальная [...]]]></description>
			<content:encoded><![CDATA[<p>Уже писали много раз, просто приведу свой код.</p>
<p>В JavaScript-файле размещаем такую функцию:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> width<span style="color: #009900;">&#40;</span>min<span style="color: #339933;">,</span>max<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	w <span style="color: #339933;">=</span> document.<span style="color: #660066;">documentElement</span>.<span style="color: #660066;">clientWidth</span><span style="color: #339933;">;</span>
	<span style="color: #000066; font-weight: bold;">return</span> <span style="color: #009900;">&#40;</span>w <span style="color: #339933;">&lt;=</span> min<span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> min <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;px&quot;</span> <span style="color: #339933;">:</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>w <span style="color: #339933;">&gt;=</span> max<span style="color: #009900;">&#41;</span> <span style="color: #339933;">?</span> max <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;px&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;auto&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Функция всего лишь принимает значения максимальной и минимальной ширины, проверяет текущую ширину документа и возвращает значение:</p>
<ol>
<li>Если ширина документа меньше минимальной ширины, то возвращается минимальная ширина;</li>
<li>Если ширина документа больше максимальной ширины, то возвращается максимальная ширина;</li>
<li>Иначе ширина указывается автоматическая.</li>
</ol>
<p>Функция из CSS вызывается следующим образом:</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">div <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> expression<span style="color: #00AA00;">&#40;</span><span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">&#40;</span><span style="color: #cc66cc;">600</span><span style="color: #00AA00;">,</span><span style="color: #cc66cc;">1000</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">&#41;</span><span style="color: #00AA00;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/* далее для нормальных браузеров */</span>
    <span style="color: #000000; font-weight: bold;">min-width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">600px</span><span style="color: #00AA00;">;</span> 
    <span style="color: #000000; font-weight: bold;">max-width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">1000px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>600 и 1000 — минимальная и максимальная ширина. Поскольку expression работает только для IE, а min-width и max-width уже работают в IE7 и IE8, то этот CSS нужно изолировать и вынести в отдельный css-файл и подключить его с помощью условных комментариев, либо воспользоваться хакками, поскольку чтобы изменить значение придётся лезть в два файла, а не в один. Ну это уже как кому удобнее.</p>
<p><a href='http://seleckis.lv/wp-content/uploads/2009/08/min-max-width.zip'>Скачайте пример</a> и убедитесь, что всё работает.</p>
<p>Минимальную ширину в IE 6 можно эмулировать с помощью приёма, в котором указывается правый border для контейнера шириной в необходимую минимальную ширину элемента, а элементу задаётся правый отрицательный margin равный той же минимальной ширине. При этом внутренний элемент должен быть либо плавающим (float), либо inline-block. В общем не читайте и не внимайте в эти последние предложения, а просто посмотрите <a href="http://www.cssplay.co.uk/boxes/width.html">пример на cssplay.co.uk</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.seleckis.lv/journal/browsers/min-width-i-max-width-v-ie6-s-pomoschyu-expression/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Ещё один PNG Fix для IE6</title>
		<link>http://www.seleckis.lv/journal/javascript/eshe-odi-png-fix-dlya-ie6</link>
		<comments>http://www.seleckis.lv/journal/javascript/eshe-odi-png-fix-dlya-ie6#comments</comments>
		<pubDate>Fri, 28 Nov 2008 12:56:41 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://seleckis.lv/?p=1447</guid>
		<description><![CDATA[Разработчики из Unit Interactive написали новый скрипт заставляющий IE6 адекватно отображать полупрозрачные PNG‑картинки — Unit PNG Fix.
Главные преимущества скрипта:

Очень компактный JavaScript: меньше 1 Kb!
Исправляет большинство проблем интерактивности вызванных использованием IE-фильтров.
Работает и для &#60;img&#62; и для CSS-свойства «background».
Запускается автоматически. Не нужно определять классы или вызывать функции.
Работает и для элементов со значением auto для свойств width и height.

Установка [...]]]></description>
			<content:encoded><![CDATA[<p>Разработчики из <a href="http://unitinteractive.com/labs">Unit Interactive</a> написали новый скрипт заставляющий IE6 адекватно отображать полупрозрачные PNG‑картинки — <a href="http://unitinteractive.com/labs/unitpngfix.php">Unit PNG Fix</a>.</p>
<h3>Главные преимущества скрипта:</h3>
<ul>
<li>Очень компактный JavaScript: меньше 1 Kb!</li>
<li>Исправляет большинство проблем интерактивности вызванных использованием IE-фильтров.</li>
<li>Работает и для &lt;img&gt; и для CSS-свойства «background».</li>
<li>Запускается автоматически. Не нужно определять классы или вызывать функции.</li>
<li>Работает и для элементов со значением <em>auto</em> для свойств <em>width</em> и <em>height.</em></li>
</ul>
<p>Установка скрипта:</p>
<ol>
<li><a href="http://labs.unitinteractive.com/unitpngfix.php">Скачиваем</a> это чудо.</li>
<li>Подключаем в &lt;head&gt;:

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">&lt;!--[if lt IE 7]&gt;</span>
<span style="color: #808080; font-style: italic;">        &lt;script type=&quot;text/javascript&quot; src=&quot;unitpngfix.js&quot;&gt;&lt;/script&gt;</span>
<span style="color: #808080; font-style: italic;">&lt;![endif]--&gt;</span></pre></div></div>

<p>Естественно путь к файлу сами правите как нужно.</li>
<li>Файл «clear.gif» помещаем в папочку с картинками, а в файле скрипта «unitpngfix.js» исправляете путь к этой картинке (только путь должен быть прямой относительно корня сайта).</li>
</ol>
<p>Небольшие примечания:</p>
<ol>
<li>Unit PNG Fix проверяет наличие CSS-свойства «background-repeat» и если оно используется, то в IE6 картинка растягивается, чтобы заполнить всю площадь элемента. Чушь конечно, но это единственный вариант выхода из ситуации, когда IE6 напрочь игнорирует это свойство.</li>
<li>А так же, нет возможности изменить позицию фона в элементе. Стало быть техника CSS работать не будет. Ну и не надо, для таких вещей на сайтах с требованиями высокой производительности используйте <a href="http://webo.in/articles/habrahabr/46-cross-browser-data-url/">data:URI в связке с MHTML</a>.</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://www.seleckis.lv/journal/javascript/eshe-odi-png-fix-dlya-ie6/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Публичная порка JS-гуру</title>
		<link>http://www.seleckis.lv/journal/fun/publichnaya-porka-js-guru</link>
		<comments>http://www.seleckis.lv/journal/fun/publichnaya-porka-js-guru#comments</comments>
		<pubDate>Mon, 09 Jun 2008 13:09:32 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Развлекуха]]></category>

		<guid isPermaLink="false">http://seleckis.lv/journal/fun/publichnaya-porka-js-guru</guid>
		<description><![CDATA[Конкурс закончился и работы проверены. Работы прислали 11 программистов, из которых один участник прислал аж 8 вариантов.
На удивление решения задачи оказались очень разные. Многие писали обработчики событий обычным способом, но некоторые всё-таки рекомендуемым AddEventListener/AttachEvent. Поразило разнообразие способов проверки на пробелы и наличие классов. 
В принципе, поскольку сама задача была решена практически всеми, то нет смысла [...]]]></description>
			<content:encoded><![CDATA[<p>Конкурс закончился и работы проверены. Работы прислали 11 программистов, из которых один участник прислал аж 8 вариантов.</p>
<p>На удивление решения задачи оказались очень разные. Многие писали обработчики событий обычным способом, но некоторые всё-таки рекомендуемым AddEventListener/AttachEvent. Поразило разнообразие способов проверки на пробелы и наличие классов. </p>
<p>В принципе, поскольку сама задача была решена практически всеми, то нет смысла опираться на эти результаты при подведении итогов. Поэтому, я буду придираться не только к самой задаче, но и к стилю программирования.</p>
<h3><a href='http://seleckis.lv/wp-content/uploads/2008/06/said-ali.zip' title=''> Said</a></h3>
<p>Эффективное решение с помощью цикла проверить все поля и свойства объекта inputData перед выводом. А, ведь действительно, поля могут быть заполнены не только вручную, но и скриптом.</p>
<p>Хорошее решение вынести все тримы в отдельные функции и использовать их как в PHP. Правда, на мой взгляд такие вещи должны прописываться как прототипы.</p>
<p>Нехороший повтор AddEventListener/AttachEvent. Можно было объединить.</p>
<p>Неправильное изменение элемента. Класс должен добавляться, а не заменяться.</p>
<p>Не могу понять эту конструкцию.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span><span style="color: #009900;">&#40;</span>e.<span style="color: #660066;">target</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'text'</span><span style="color: #009900;">&#41;</span> e.<span style="color: #660066;">target</span>.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">'edit'</span><span style="color: #339933;">;</span></pre></div></div>

<p>Разве typeof(e.target) должен возвращать text? По-моему он возвращает object. Соответственно эта часть не работает в Firefox. Видимо автор скрипта хотел проверить тип элемента формы. Правильно было бы написать так:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">typeof</span><span style="color: #009900;">&#40;</span>e.<span style="color: #660066;">target</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">!=</span> <span style="color: #3366CC;">'undefined'</span> <span style="color: #339933;">&amp;&amp;</span> e.<span style="color: #660066;">target</span>.<span style="color: #660066;">type</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">'text'</span><span style="color: #009900;">&#41;</span> e.<span style="color: #660066;">target</span>.<span style="color: #660066;">className</span> <span style="color: #339933;">+=</span> <span style="color: #3366CC;">' edit'</span><span style="color: #339933;">;</span></pre></div></div>

<p>Правильно, добавил проверку существования свойства объекта inputData, на тот случай если в форму добавили поле ввода, а свойство в inputData не добавили.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!!</span>inputData<span style="color: #009900;">&#91;</span>el.<span style="color: #000066;">name</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">||</span> inputData<span style="color: #009900;">&#91;</span>el.<span style="color: #000066;">name</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span> inputData<span style="color: #009900;">&#91;</span>el.<span style="color: #000066;">name</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> el.<span style="color: #660066;">value</span><span style="color: #339933;">;</span></pre></div></div>

<p>Только для чего написаны два восклицательных знака? Ведь в конструкции if такие вещи в любом случае конвертируются в Boolean.</p>
<h3><a href='http://seleckis.lv/wp-content/uploads/2008/06/sergiusd.zip' title=''>SergiusD</a></h3>
<p>Хорошая работа с массивами.</p>
<p>Есть проверка существования класса error.</p>
<p>Извращение:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">arr<span style="color: #009900;">&#91;</span>ind<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span></pre></div></div>

<p>Для таких вещей есть функция splice.</p>
<p>Неоправданное решение относительно поиска в className, путём создания прототипа indexOf. Даже если использовать этот вариант, то лучше было бы разбивать строку в массив уже в indexOf. А возвращать и проверять в этом случае правильнее не -1 и ещё какое-то число, а true и false.</p>
<h3><a href='http://seleckis.lv/wp-content/uploads/2008/06/andrej.zip' title=''>Андрей</a></h3>
<p>Сделано не совсем универсально. При убирании фокуса возвращается первоначальный класс как первый. А если их там несколько?</p>
<p>Примитивный и неоптимизированный вывод данных в showAll. Гораздо лучше можно было бы сделать и не использовать лишние переменные.</p>
<p>Такие вещи нужно объединять в единое регулярное выражение:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^\s/</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>
.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/\s$/</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span></pre></div></div>

<h3><a href='http://seleckis.lv/wp-content/uploads/2008/06/nikolaj.zip' title=''>Николай</a></h3>
<p>Хороший вариант обращения к объектам по id или напрямую. Любят такие вещи во фреймворках.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> $ <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #000066; font-weight: bold;">typeof</span> id <span style="color: #339933;">==</span> <span style="color: #3366CC;">'string'</span> <span style="color: #339933;">?</span> document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span> <span style="color: #339933;">:</span> id<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Смысла особого нет в том, чтобы обращаться к объекту не на прямую, а через $, но ради единообразия&#8230;</p>
<p>Изящный вариант проверки существования класса:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">return</span> <span style="color: #339933;">!!</span>el.<span style="color: #660066;">className</span>.<span style="color: #660066;">match</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'(^|<span style="color: #000099; font-weight: bold;">\\</span>s)'</span> <span style="color: #339933;">+</span> className <span style="color: #339933;">+</span> <span style="color: #3366CC;">'(<span style="color: #000099; font-weight: bold;">\\</span>s|$)'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Мусор в цикле:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">l <span style="color: #339933;">=</span> inputs.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> l</pre></div></div>

<p>Это зачем?</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#40;</span>inputs<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3><a href='http://seleckis.lv/wp-content/uploads/2008/06/igor-istochnik.zip' title=''>Игорь Источник</a></h3>
<p>Параноидально концептуальный подход. Годен для больших проектов. В пору писать свой фреймворк.</p>
<p>Хорошая прописка прототипов, особенно ifEmpty.</p>
<p>В конце вывода лишний перенос строки.</p>
<p>Если удалить текст, то поле становится красным. Если дать ему фокус, то класс будет: read error edit.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">element.<span style="color: #660066;">className</span> <span style="color: #339933;">=</span> element.<span style="color: #660066;">className</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; &quot;</span>  <span style="color: #339933;">+</span> className<span style="color: #339933;">;</span></pre></div></div>

<p>для таких вещей есть оператор «+=»:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">element.<span style="color: #660066;">className</span> <span style="color: #339933;">+=</span> <span style="color: #3366CC;">&quot; &quot;</span>  <span style="color: #339933;">+</span> className<span style="color: #339933;">;</span></pre></div></div>

<p>Тяжеловатый для восприятия стиль.</p>
<h3><a href='http://seleckis.lv/wp-content/uploads/2008/06/fx-poster.zip' title=''>FX Poster</a></h3>
<p>Да, с классами лучше всего работать как с масивом, а не как со строкой. Правильно. </p>
<p>С пробелами так работать нельзя:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">value</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/^ +| +$/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/ +/g</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">' '</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Нужно искать пробельный символ а не пробел.</p>
<p>Зачем столько строгих проверок (===, !==)?</p>
<p>В конце вывода будет лишний перенос строки.</p>
<h3><a href='http://seleckis.lv/wp-content/uploads/2008/06/artem-gluvchynskyj.zip' title=''>Артём Глувчинский</a></h3>
<p>Тоже хороший вариант проверки существования класса</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span>.<span style="color: #660066;">className</span>.<span style="color: #660066;">indexOf</span><span style="color: #009900;">&#40;</span>errorClass<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;=</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span></pre></div></div>

<p>В задании сказано «очистить содержимое поля от лишних пробелов». Значение поля очистил, но не заменил содержимое на очищенное значение.</p>
<p>В функции getResults после вывода сообщения об ошибке можно просто написать return а не return false?</p>
<h3><a href='http://seleckis.lv/wp-content/uploads/2008/06/artyom-makarov.zip' title=''>Артём Макаров</a></h3>
<p>Не убирается последний пробел в поле ввода.</p>
<p>В регулярном выражении указан пробел, а не пробельный символ.</p>
<p>Некрасивая обработка классов удалением слов и пробелов.</p>
<p>Хитро:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">response <span style="color: #339933;">+=</span> <span style="color: #009900;">&#40;</span>response.<span style="color: #660066;">length</span> <span style="color: #339933;">?</span> <span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span> <span style="color: #339933;">:</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> v <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot; = &quot;</span> <span style="color: #339933;">+</span> inputData<span style="color: #009900;">&#91;</span>v<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span></pre></div></div>

<p>но запись в массив и объединение с помощью метода join() — умнее.</p>
<p>Плюс в том, что когда необходимо быстро написать код, такое последовательное решение наиболее удобно в восприятии.</p>
<h3><a href='http://seleckis.lv/wp-content/uploads/2008/06/dmytro-shteflyuk.zip' title=''>Dmytro-Shteflyuk</a></h3>
<p>Чем больше щёлкаешь по полю, стираешь и вписываешь текст в поле, тем больше пробелов у поля ввода между read и edit.</p>
<p>Чем такой вариант:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">results.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
results.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'='</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
results.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>inputData<span style="color: #009900;">&#91;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
results.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>лучше чем</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">results.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span><span style="color: #000066;">name</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'='</span> <span style="color: #339933;">+</span> inputData<span style="color: #009900;">&#91;</span><span style="color: #000066;">name</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">'<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>?<br />
Преимуществ не вижу. Опять же в конце будет лишний перенос строки.</p>
<h3>Алик Кириллович</h3>
<p>Победитель, который не только правильно выполнил задание, но также исследовал поимку событий в случае динамического добавления полей, а так же переноса введённых данных из одного поля в другое (drag&#038;drop). Гостевой пост от победителя, в котором раскроются все секреты исследования ожидается в ближайшее время.</p>
<h3>И последнее</h3>
<p>Господа программисты, я задолбался конвертировать эти каракули:<br />
<code><br />
Ýòà ôóíêöèÿ óñòàíàâëèâàåò îáðàáîò÷èê fncAction ñîáûòèÿ txtType äëÿ óçëà, óäîâëåòâîðÿþùåãî óñëîâèþ fncCondition.<br />
</code><br />
Выучите наизусть, раз и на всегда!</p>
<p style="font-size: 100px; text-align: center">UTF-8</p>
<p>Я очень рад, что мои читатели откликнулись на предложение и приняли участие в конкурсе, но я никак не думал, что их будет так много! Проверять одному достаточно сложно, поскольку со временем глаз замыливается и можно пропустить очевидные ошибки, а в других работах они могут броситься в глаза. Нужно было бы собрать целую комиссию для объективной оценки работ. Поэтому прошу быть снисходительными к результатам конкурса. Думаю, что мои замечания для вас будут только полезными и не вызовут агрессивного настроя: «Ууу, докопался!»</p>
<p>Спасибо всем за участие!</p>
<p><a href='http://seleckis.lv/wp-content/uploads/2008/06/js-guru-konkurs.zip' title=''>Все работы в одном архиве</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.seleckis.lv/journal/fun/publichnaya-porka-js-guru/feed</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Конкурс для javascript-гуру!</title>
		<link>http://www.seleckis.lv/journal/fun/konkurs-dlya-javascript-guru</link>
		<comments>http://www.seleckis.lv/journal/fun/konkurs-dlya-javascript-guru#comments</comments>
		<pubDate>Sat, 17 May 2008 20:30:14 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Развлекуха]]></category>

		<guid isPermaLink="false">http://seleckis.lv/journal/fun/konkurs-dlya-javascript-guru</guid>
		<description><![CDATA[Объявляю конкурс среди javascript-программистов!
В качестве конкурсной задачи предлагаю выполнить зачётное задание по javascript, которое выполняли в этом году студенты web-курсов на которых я преподаю.
Итак, задание:
Дана форма. Нужно:

При щелчке по лейблу и при помещении фокуса в поле нужно полю добавить класс «edit».
При убирании фокуса из поля нужно:

очистить содержимое поля от лишних пробелов слева и справа и [...]]]></description>
			<content:encoded><![CDATA[<p>Объявляю конкурс среди javascript-программистов!</p>
<p>В качестве конкурсной задачи предлагаю выполнить зачётное задание по javascript, которое выполняли в этом году студенты web-курсов на которых я преподаю.</p>
<p>Итак, задание:</p>
<p><a href='http://seleckis.lv/wp-content/uploads/2008/05/2008-exam-js-blog.zip' title=''>Дана форма</a>. Нужно:</p>
<ol>
<li>При щелчке по лейблу и при помещении фокуса в поле нужно полю добавить класс «edit».</li>
<li>При убирании фокуса из поля нужно:
<ol>
<li>очистить содержимое поля от лишних пробелов слева и справа и от дублированных пробелов;</li>
<li>записать содержимое поля в одноимённое свойство объекта inputData;</li>
<li>проверить:
<ol>
<li>если содержимое поля пустое, то нужно убрать класс «edit» и добавить класс «error»,</li>
<li>иначе — вернуть первоначальный класс.</li>
</ol>
</li>
</ol>
</li>
<li>При щелчке по кнопке «Show All» проверить, нет ли пустых свойств у объекта inputData.
<ol>
<li>Если есть — открыть окно «alert» с сообщением: «Please fill all fields!»,</li>
<li>иначе — записать содержимое объекта inputData в переменную и вывести в окно «alert» в таком виде:<br />
firstname = Vasily<br />
lastname = Pupkoff.</li>
</ol>
</li>
</ol>
<p>Задание достаточно простое. Проблем, думаю не будет, однако нужно соблюсти следующие условия:</p>
<ol>
<li>Кроссбраузерность.</li>
<li>Универсальность — должно быть применимо ко всем текстовым полям ввода (type=&#8221;text&#8221;). Даже если я захочу добавить ещё несколько полей и соответствующие свойства объекта inputData, скрипт должен работать и для них.</li>
<li>Не использовать фреймворки и библиотеки javascript.</li>
<li>Код должен быть только в файле script.js, ни html, ни css редактировать нельзя.</li>
</ol>
<h4>Конкурс закончился. Работы проверяются.</h4>
]]></content:encoded>
			<wfw:commentRss>http://www.seleckis.lv/journal/fun/konkurs-dlya-javascript-guru/feed</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Градиентный текст с помощью CSS</title>
		<link>http://www.seleckis.lv/journal/world-creative/gradientnyiy-tekst-s-pomoschyu-css</link>
		<comments>http://www.seleckis.lv/journal/world-creative/gradientnyiy-tekst-s-pomoschyu-css#comments</comments>
		<pubDate>Fri, 18 Jan 2008 20:32:07 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Веб‑дизайн]]></category>
		<category><![CDATA[Мировой креатив]]></category>

		<guid isPermaLink="false">http://www.seleckis.lv/journal/gradientnyiy-tekst-s-pomoschyu-css</guid>
		<description><![CDATA[Иногда бывают дни, когда не хватает времени, иногда бывают моменты, когда не хочется ничего выдумывать. Тогда приходят спасительный копи-пэйст!
В этом посте я не буду ничего исследовать, придумывать, обучать и выбирать. Просто поделюсь с вами ссылкой на замечательный пост  дизайнера Nick La. Nick получит на свой пост очередной трекбек, а расслаблюсь ещё на пару дней.
Итак, [...]]]></description>
			<content:encoded><![CDATA[<p>Иногда бывают дни, когда не хватает времени, иногда бывают моменты, когда не хочется ничего выдумывать. Тогда приходят спасительный <strong>копи-пэйст</strong>!</p>
<p>В этом посте я не буду ничего исследовать, придумывать, обучать и выбирать. Просто поделюсь с вами <a href="http://www.webdesignerwall.com/tutorials/css-gradient-text-effect/">ссылкой на замечательный пост  дизайнера Nick La</a>. Nick получит на свой пост очередной трекбек, а расслаблюсь ещё на пару дней.</p>
<p>Итак, если вы хотите создать градиентный заголовок не заморациваясь с картинками в Photoshop, вам поможет очень простой CSS трюк использующий картинку в формате PNG (никаких Javascript или Flash, только чистый CSS). Всё что вам нужно — это пустой тэг &lt;span&gt; в заголовочном тэге, который будет накладываться на буквы с помощью свойства position:absolute.Тестировано на Firefox, Safari, Opera, и даже на Internet Explorer 6.</p>
<p>Пример:</p>
<style type="text/css"> h1 {  text-align: center; font: bold 330%/100% "Lucida Grande";   position: relative;   color: #464646; } h1 span {   background: url(http://www.seleckis.lv/wp-content/uploads/2008/01/gradient-white.png) repeat-x;   position: absolute;   display: block;   width: 100%;   height: 31px; } </style>
<p><!--[if lt IE 7]></p>
<style type="text/css"> h1 span {   background: none;  filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\\'http://www.seleckis.lv/wp-content/uploads/2008/01/gradient-white.png\\', sizingMethod=\\'scale\\'); }</style>
<p><![endif]--></p>
<h1><span></span>ГРАДИЕНТ С ПОМОЩЬЮ CSS</h1>
<h3> Как же это работает?</h3>
<p>А очень просто. Рисуем в фотошопе градиент, в высоту шрифта и ширину 1-го пикселя, причём базовый цвет должен быть такой же как и фон у страницы, вверху прозрачность можно варьировать по своему усмотрению, внизу — полная прозрачность. С помощью CSS эта картинка множится по горизонтали и закрывает весь текст. А наложение происходит уже знакомым <a href="http://www.seleckis.lv/journal/css/metod-pixy">вам методом</a>, правда тэг &lt;span&gt; здесь должен уже писаться перед текстом, но это дело верстальщика — можно сделать и по-другому. Главное — идея:</p>
<p style="text-align: center"><img src="http://www.seleckis.lv/wp-content/uploads/2008/01/screen1.gif" /></p>
<h3>HTML</h3>
<p><code>&lt;h1&gt;&lt;span&gt;&lt;/span&gt;CSS Gradient Text&lt;/h1&gt;</code></p>
<h3> CSS</h3>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">h1 <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">font</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">bold</span> <span style="color: #933;"><span style="color: #cc66cc;">330</span>%</span>/<span style="color: #933;"><span style="color: #cc66cc;">100</span>%</span> <span style="color: #ff0000;">&quot;Lucida Grande&quot;</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">relative</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">color</span><span style="color: #00AA00;">:</span> <span style="color: #cc00cc;">#464646</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
h1 span <span style="color: #00AA00;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">gradient.png</span><span style="color: #00AA00;">&#41;</span> <span style="color: #993333;">repeat-x</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">display</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">block</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;"><span style="color: #cc66cc;">100</span>%</span><span style="color: #00AA00;">;</span>
    <span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">31px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Ну и поправка к Internet Explorer 6.<br />
<code>&lt;!--[if lt IE 7]&gt;<br />
&lt;style type="text/css"&gt;<br />
h1 span {<br />
background: none;<br />
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='gradient.png', sizingMethod='scale');<br />
}<br />
&lt;/style&gt;<br />
&lt;![endif]--&gt;</code><br />
Автор так же предлагает маньякам валидности использовать jquery функцию для вставки тэга &lt;span&gt; в заголовок.</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;h1&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">prepend</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;span&gt;&lt;/span&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><a href="http://www.webdesignerwall.com/demo/css-gradient-text/">Смотрите что ещё можно сделать</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.seleckis.lv/journal/world-creative/gradientnyiy-tekst-s-pomoschyu-css/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Иерархический список с помощью jQuery</title>
		<link>http://www.seleckis.lv/journal/css/ierarhicheskiy-spisok-s-pomoschyu-jquery</link>
		<comments>http://www.seleckis.lv/journal/css/ierarhicheskiy-spisok-s-pomoschyu-jquery#comments</comments>
		<pubDate>Wed, 02 Jan 2008 13:12:06 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.seleckis.lv/journal/css/ierarhicheskiy-spisok-s-pomoschyu-jquery</guid>
		<description><![CDATA[Написал очень простой и функциональный скрипт организации иерархического списка. Но смысл заключается не только в скрипте, но и в правильной вёрстке.
HTML
Вот из такого небольшого обычного списка мы сделаем раскрывающийся иерархический список.

&#60;ul class=&#34;ns_hierarchy&#34;&#62;
&#60;li&#62;Модель статусных групп (классов) Л. Уорнера
	&#60;ul&#62;
	&#60;li&#62;Высший класс
		&#60;ul&#62;
		&#60;li&#62;Верхний-высший класс, включал так называемые старые семьи.&#60;/li&#62;
		&#60;li&#62;Низший-высший класс, не включал старые родовые семьи.&#60;/li&#62;
		&#60;/ul&#62;
	&#60;/li&#62;
	&#60;li&#62;Средний класс
		&#60;ul&#62;
		&#60;li&#62;Верхний-средний класс состоял из собственников [...]]]></description>
			<content:encoded><![CDATA[<p>Написал очень простой и функциональный скрипт организации иерархического списка. Но смысл заключается не только в скрипте, но и в правильной вёрстке.</p>
<h3>HTML</h3>
<p>Вот из такого небольшого обычного списка мы сделаем раскрывающийся иерархический список.</p>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;ns_hierarchy&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Модель статусных групп (классов) Л. Уорнера
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Высший класс
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Верхний-высший класс, включал так называемые старые семьи.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Низший-высший класс, не включал старые родовые семьи.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Средний класс
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Верхний-средний класс состоял из собственников и профессионалов.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Нижний-средний класс составляли низшие служащие, приказчики, клерки.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Низший класс
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Верхний-низший класс включал рабочих.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">li</span>&gt;</span>Нижний-низший класс <span style="color: #ddbb00;">&amp;mdash;</span> <span style="color: #ddbb00;">&amp;laquo;</span>социальное дно<span style="color: #ddbb00;">&amp;raquo;</span>.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
		<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">li</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">ul</span>&gt;</span></pre></div></div>

<p>Получится следующее:</p>
<ul class="ns_hierarchy">
<li>Модель статусных групп (классов) Л. Уорнера
<ul>
<li>Высший класс
<ul>
<li>Верхний-высший класс, включал так называемые старые семьи.</li>
<li>Низший-высший класс, не включал старые родовые семьи.</li>
</ul>
</li>
<li>Средний класс
<ul>
<li>Верхний-средний класс состоял из собственников и профессионалов.</li>
<li>Нижний-средний класс составляли низшие служащие, приказчики, клерки.</li>
</ul>
</li>
<li>Низший класс
<ul>
<li>Верхний-низший класс включал рабочих.</li>
<li>Нижний-низший класс &mdash; &laquo;социальное дно&raquo;.</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Как видите, код лаконичный и логичный.</p>
<h3>Что нужно сделать?</h3>
<ul>
<li>Каждому элементу списка, который имеет внутренний список, с помощью JS добавим тэг &lt;span&gt;, который будет являться кнопкой раскрытия или закрытия списка. Эта кнопка будет текстовой, но нам бы хотелось, чтоб была возможность отображать её и графически. Поэтому для удобства, внутри поместим ещё один тэг, который будет содержать картинку, которую и наложим на текстовое отображение кнопки.</li>
<li>Скроем все внутренние списки, пропишем начальные классы.</li>
<li>Каждой кнопке напишем событие onclick, по которому будем изменять класс у элемента списка, и скрывать или показывать внутренний список</li>
</ul>
<h3>CSS</h3>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">ul<span style="color: #6666ff;">.ns_hierarchy</span> li<span style="color: #00AA00;">&#123;</span> <span style="color: #808080; font-style: italic;">/* Чтобы не было сдвига элементов списка из-за кнопки раскрытия/закрытия */</span>
	<span style="color: #000000; font-weight: bold;">clear</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">both</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
ul<span style="color: #6666ff;">.ns_hierarchy</span><span style="color: #00AA00;">,</span> ul<span style="color: #6666ff;">.ns_hierarchy</span> ul<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">list-style-type</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">none</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* Убираем маркер */</span>
	<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">padding-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">0px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #808080; font-style: italic;">/* наводим красоту */</span>
ul.ns_hierarchy<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">padding-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">18px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
ul<span style="color: #6666ff;">.ns_hierarchy</span> ul<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">padding-left</span><span style="color: #00AA00;">:</span> <span style="color: #933;">22px</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
li<span style="color: #6666ff;">.nsh_closed</span> span<span style="color: #00AA00;">,</span> li<span style="color: #6666ff;">.nsh_opened</span> span<span style="color: #00AA00;">&#123;</span> // тэг span<span style="color: #00AA00;">,</span> на который будем жать
	<span style="color: #000000; font-weight: bold;">float</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">relative</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">9px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">9px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">margin</span><span style="color: #00AA00;">:</span> <span style="color: #933;">6px</span> <span style="color: #933;">6px</span> <span style="color: #cc66cc;">0</span> <span style="color: #933;">-18px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">pointer</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">overflow</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">hidden</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">font</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">normal</span> <span style="color: #933;">0.8em</span>/<span style="color: #933;">0.8em</span> <span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
li<span style="color: #6666ff;">.nsh_closed</span> span em<span style="color: #00AA00;">,</span> li<span style="color: #6666ff;">.nsh_opened</span> span em<span style="color: #00AA00;">&#123;</span> // тэг em в тэгу span<span style="color: #00AA00;">,</span> который будет содержать картинку
	<span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">9px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">9px</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">left</span><span style="color: #00AA00;">:</span> <span style="color: #cc66cc;">0</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">plus-min.gif</span><span style="color: #00AA00;">&#41;</span> <span style="color: #993333;">no-repeat</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
li<span style="color: #6666ff;">.nsh_closed</span> span em<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">background-position</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">bottom</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Подготовительные работы провели, теперь за дело</p>
<h3>jQuery</h3>
<p>Не забываем подключить два файла: jquery библиотеку и наш скрипт</p>
<p>А скрипт будет такой:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #006600; font-style: italic;">//загрузив документ,</span>
<span style="color: #009900;">&#123;</span>
	<span style="color: #006600; font-style: italic;">// добавляем тэг &lt;em&gt;span&lt;/em&gt; с плюсиком и тэгом &lt;em&gt;em&lt;/em&gt; во все элементы списка,</span>
	<span style="color: #006600; font-style: italic;">// которые содержат внутренние списки</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.ns_hierarchy li:has(ul)&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">prepend</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;span&gt;+&lt;em&gt;&lt;!----&gt;&lt;/em&gt;&lt;/span&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.ns_hierarchy li:has(ul)&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;nsh_closed&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// им же добавляем класс по-умолчанию</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.ns_hierarchy li &gt; ul&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// скрываем все внутренние списки</span>
	<span style="color: #006600; font-style: italic;">// при щелчке по кнопке меняем плюс на минус, или наоборот,</span>
	<span style="color: #006600; font-style: italic;">// а так же скрываем или показываем внутренние списки</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.ns_hierarchy li &gt; span&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
		<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;li&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;class&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;nsh_closed&quot;</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;li&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;class&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;nsh_opened&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&amp;minus;&lt;em&gt;&lt;!----&gt;&lt;/em&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
		<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;li&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;class&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;nsh_opened&quot;</span> <span style="color: #009900;">&#41;</span>
		<span style="color: #009900;">&#123;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;li&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;class&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;nsh_closed&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;+&lt;em&gt;&lt;!----&gt;&lt;/em&gt;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Вот и всё.</p>
<p>По желанию можно изменить внешний вид, заменить изображение кнопки, изменить скрипт так, чтобы он не скрывал/показывал списки напрямую, а менял классы, этим можно  добавить возможность прописывания классов перед загрузкой меню, чтобы с самого начала меню уже было открыто.</p>
<p>Скрипт кроссбраузерный, расширяемый, поключаемый, настраиваемый и прочее и прочее&#8230;<br />
Пользуйтесь!</p>
<p><a href='http://www.seleckis.lv/wp-content/themes/seleckis_v2/ns_hierarchy/index.html' title='Посмотреть пример ns_hierarchy'>Посмотреть пример</a></p>
<p><a href='http://www.seleckis.lv/wp-content/uploads/2008/01/ns_hierarchy.zip' title='Скачать исходник ns_hierarchy.zip'>Скачать исходник</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.seleckis.lv/journal/css/ierarhicheskiy-spisok-s-pomoschyu-jquery/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>JS-Imagemapping — исправленно.</title>
		<link>http://www.seleckis.lv/journal/javascript/js-imagemapping-ispravlenno</link>
		<comments>http://www.seleckis.lv/journal/javascript/js-imagemapping-ispravlenno#comments</comments>
		<pubDate>Fri, 07 Dec 2007 10:36:50 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.seleckis.lv/jquery/js-imagemapping-ispravlenno</guid>
		<description><![CDATA[В предыдущем посте я написал как делается активный imagemapping на jQuery.
Но по какой-то непонятной причине мой мозг в один момент глюканул и решил, что указывать абсолютное позиционирование относительно всего документа — единственный вариант. А ведь это не правда.
Исправляем

В CSS добавляем относительное позиционирование тэгу div с id=&#8221;map&#8221;:

#map&#123; 	position: relative; &#125;

Теперь кружочки будут позиционироваться относительно этого дива, [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.seleckis.lv/journal/javascript/aktivnyiy-imagemapping-na-jquery">В предыдущем посте</a> я написал как делается активный imagemapping на jQuery.</p>
<p>Но по какой-то непонятной причине мой мозг в один момент глюканул и решил, что указывать абсолютное позиционирование относительно всего документа — единственный вариант. А ведь это не правда.</p>
<h3>Исправляем</h3>
<ol>
<li>В CSS добавляем относительное позиционирование тэгу div с id=&#8221;map&#8221;:

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #cc00cc;">#map</span><span style="color: #00AA00;">&#123;</span> 	<span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">relative</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>Теперь кружочки будут позиционироваться относительно этого дива, а не относительно body.</li>
<li>В коде исправляем позиционирование удалив координаты карты и добавляя кружочки не в body а в #map.

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> add_numbers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;area&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>
		<span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #003366; font-weight: bold;">var</span> id <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;href&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003366; font-weight: bold;">var</span> coords <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;coords&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;,&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003366; font-weight: bold;">var</span> max_l <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> min_l <span style="color: #339933;">=</span> <span style="color: #CC0000;">9999</span><span style="color: #339933;">,</span> max_t <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> min_t <span style="color: #339933;">=</span> <span style="color: #CC0000;">9999</span><span style="color: #339933;">;</span>
			<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>coords.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">%</span>2 <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					max_l <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>max_l <span style="color: #339933;">&lt;</span> Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>max_l<span style="color: #339933;">;</span>
					min_l <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>min_l <span style="color: #339933;">&gt;</span> Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>min_l<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
					max_t <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>max_t <span style="color: #339933;">&lt;</span> Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>max_t<span style="color: #339933;">;</span>
					min_t <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>min_t <span style="color: #339933;">&gt;</span> Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>min_t<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #003366; font-weight: bold;">var</span> left <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>max_l<span style="color: #339933;">+</span>min_l<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">11</span><span style="color: #339933;">;</span>
			<span style="color: #003366; font-weight: bold;">var</span> top <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>max_t<span style="color: #339933;">+</span>min_t<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">11</span><span style="color: #339933;">;</span>
			<span style="color: #003366; font-weight: bold;">var</span> div <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;div class=&quot;overblock '</span> <span style="color: #339933;">+</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;class&quot;</span><span style="color: #009900;">&#41;</span>
			div <span style="color: #339933;">+=</span> <span style="color: #3366CC;">'&quot; id=&quot;num_'</span> <span style="color: #339933;">+</span> id <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;&gt;'</span> <span style="color: #339933;">+</span> id.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/div&gt;&quot;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#map&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span>div<span style="color: #009900;">&#41;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#num_&quot;</span> <span style="color: #339933;">+</span> id<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> <span style="color: #3366CC;">&quot;left&quot;</span><span style="color: #339933;">:</span> left<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;top&quot;</span><span style="color: #339933;">:</span> top <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#num_&quot;</span> <span style="color: #339933;">+</span> id<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hover</span><span style="color: #009900;">&#40;</span>
				<span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					add_highlight<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
				<span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					remove_highlight<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

</li>
<li>Можем удалить $(window).resize и функцию удаления кружочков</li>
</ol>
<p>В итоге, избавляемся от багов в Опере, от необходимости перепроверять позиционирование при изменении размеров окна и можем смело отключить расширение Dimensions.</p>
<p><a href='http://www.seleckis.lv/wp-content/uploads/2007/12/jsmapping.zip' title='jsmapping'>Качаем пример</a></p>
<p>Спасибо <a href="http://www.seleckis.lv/journal/javascript/aktivnyiy-imagemapping-na-jquery#comment-3094">Игорю</a>, что направил на путь истинный.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.seleckis.lv/journal/javascript/js-imagemapping-ispravlenno/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Активный imagemapping на jQuery</title>
		<link>http://www.seleckis.lv/journal/javascript/aktivnyiy-imagemapping-na-jquery</link>
		<comments>http://www.seleckis.lv/journal/javascript/aktivnyiy-imagemapping-na-jquery#comments</comments>
		<pubDate>Thu, 06 Dec 2007 15:33:24 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.seleckis.lv/journal/javascript/aktivnyiy-imagemapping-na-jquery</guid>
		<description><![CDATA[Главная проблема стандартного способа создания карт в том, что тэг &#60;area&#62; не поддерживает никаких css свойств, т.е. при наведении курсором на активную область нельзя никак её подсветить. В этом случае Flash выигрывает (пример карты на flash реализован в проекте pludmales9.lv).
Я предлагаю такой вариант: подсвечиваются не сами активные области, а какие-то картинки расположенные по центру активной [...]]]></description>
			<content:encoded><![CDATA[<p>Главная проблема стандартного способа создания карт в том, что тэг &lt;area&gt; не поддерживает никаких css свойств, т.е. при наведении курсором на активную область нельзя никак её подсветить. В этом случае Flash выигрывает (пример карты на flash реализован в проекте <a href="http://pludmales9.lv">pludmales9.lv</a>).</p>
<p>Я предлагаю такой вариант: подсвечиваются не сами активные области, а какие-то картинки расположенные по центру активной области. Это могут быть кружочки, квадратики, и любые другие shape&#8217;ы. Проблема заключается в том, что если мы попробуем получить координаты &lt;area&gt; через offsetLeft и offsetTop, то будут возвращаться координаты всей картинки.</p>
<p>Слегка улучшить положение я предлагаю используя библиотеку <a href="http://jquery.com/">jQuery</a> (на голом JavaScript тоже можно написать, только дольше и больше). С её помощью найду все элементы &lt;area&gt;, узнаю координаты каждого из атрибута coords и найду среднее значение, размещу картинку по центру каждой области и добавлю события onmouseover и onmouseout, чтобы картинка менялась.</p>
<h3>За дело!</h3>
<p>Итак, чтобы сделать активный imagemapping <a href="http://jaunsapni.merapi.lv/plans.php">подобного плана участков</a> средствами javascript нужно:</p>
<ol>
<li>Взять картинку на которой будут размечены активные области;</li>
<li>Разметить области с помощью <a href="http://www.google.com/search?hl=en&amp;q=visual++imagemapper&amp;btnG=Search">визуальных инструментов</a> (если конечно вы не фанат ручной разметки и вам некуда девать своё время)</li>
<li>В итоге получим код такого плана:

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#map&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">img</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;images/map.png&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;My Image Map&quot;</span> <span style="color: #000066;">usemap</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#map0&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">map</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;map0&quot;</span>&gt;</span>
<span style="color: #009900;">&lt;area <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#id1&quot;</span> <span style="color: #000066;">shape</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;poly&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;free&quot;</span> <span style="color: #000066;">coords</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;240,38,295,38,295,100,365,100,365,144,240,144&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;area <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#id2&quot;</span> <span style="color: #000066;">shape</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;poly&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;sold&quot;</span> <span style="color: #000066;">coords</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;364,144,364,287,294,287,294,144&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
<span style="color: #009900;">&lt;area <span style="color: #000066;">href</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;#id3&quot;</span> <span style="color: #000066;">shape</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;poly&quot;</span> <span style="color: #000066;">class</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;free&quot;</span> <span style="color: #000066;">coords</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;364,287,364,400,294,400,294,287&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
 ................................................................................................
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">map</span>&gt;</span></pre></div></div>

<p>Чтобы можно было менять кружочек в зависимости от того, продан ли участок или нет, добавляем каждому href значение #id1, #id2, #id3 и т. д., а class=&#8221;free&#8221; и class=&#8221;sold&#8221; будут указывать на то, продан ли участок или нет.</li>
<li>Рисуем картинки такого плана:<br />
<img src="http://www.seleckis.lv/wp-content/uploads/2007/12/r_free.gif" /> <img src="http://www.seleckis.lv/wp-content/uploads/2007/12/r_bought.gif" /><br />
показывать будем верхнюю половину, а при наведении — вторую.</li>
<li>Для этих кружочков напишем CSS:

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">.overblock<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">width</span><span style="color: #00AA00;">:</span> <span style="color: #933;">22px</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* это зависит от размера картинки */</span>
	<span style="color: #000000; font-weight: bold;">height</span><span style="color: #00AA00;">:</span> <span style="color: #933;">22px</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* высоту ставим в половину меньше */</span>
	<span style="color: #000000; font-weight: bold;">position</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">absolute</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* естественно */</span>
	<span style="color: #000000; font-weight: bold;">overflow</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">hidden</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* фикс бага в IE7, а может надо было line-height маленький поставить */</span>
	<span style="color: #000000; font-weight: bold;">cursor</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">pointer</span><span style="color: #00AA00;">;</span> <span style="color: #808080; font-style: italic;">/* в IE не меняется курсор — исправляем */</span>
	<span style="color: #000000; font-weight: bold;">text-align</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">center</span><span style="color: #00AA00;">;</span>
	<span style="color: #000000; font-weight: bold;">font</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">normal</span> <span style="color: #933;">11px</span> <span style="color: #993333;">sans-serif</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #808080; font-style: italic;">/* эти два класса создаём специально чтобы было удобно указывать, какой участок продан а какой — нет. */</span>
div.free<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">images/r_free.gif</span><span style="color: #00AA00;">&#41;</span> <span style="color: #993333;">no-repeat</span> <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
div.sold<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">background</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">url</span><span style="color: #00AA00;">&#40;</span><span style="color: #ff0000; font-style: italic;">images/r_bought.gif</span><span style="color: #00AA00;">&#41;</span> <span style="color: #993333;">no-repeat</span> <span style="color: #000000; font-weight: bold;">top</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span>
<span style="color: #808080; font-style: italic;">/* добавляем класс, который будет изменять кружочек при наведении на активную область */</span>
div.selected<span style="color: #00AA00;">&#123;</span>
	<span style="color: #000000; font-weight: bold;">background-position</span><span style="color: #00AA00;">:</span> <span style="color: #000000; font-weight: bold;">bottom</span><span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

</li>
</ol>
<p>Подготовительные работы закончились, теперь самое интересное</p>
<h3>jQuery</h3>
<p>Для получения точных координат самой карты, нам нужно подключить расширение <a href="http://jquery.com/plugins/project/dimensions">Dimensions</a> (версии 1.1.2). Код, естественно будем писать отдельным файлом чтоб не засорять html.</p>
<h4>1. Сначала напишем функцию <var>add_numbers()</var>, которая каждому элементу &lt;area&gt; добавит кружочек</h4>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> add_numbers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;area&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>
		<span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
			<span style="color: #003366; font-weight: bold;">var</span> mappos <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
			<span style="color: #006600; font-style: italic;">// получаем координаты самой карты, здесь используется функция position расширения Dimensions</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#map&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">position</span><span style="color: #009900;">&#40;</span>mappos<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #003366; font-weight: bold;">var</span> id <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;href&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// получаем id активной области обрезая #</span>
			<span style="color: #003366; font-weight: bold;">var</span> coords <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;coords&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">split</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;,&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// записываем координаты в массив</span>
			<span style="color: #006600; font-style: italic;">// поскольку координаты в атрибуте coords перечисляются поочерёдно (X1, Y1, X2, Y2...),</span>
			<span style="color: #006600; font-style: italic;">// то нам нужно разделить иксы и игреки</span>
			<span style="color: #003366; font-weight: bold;">var</span> max_l <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> min_l <span style="color: #339933;">=</span> <span style="color: #CC0000;">9999</span><span style="color: #339933;">,</span> max_t <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">,</span> min_t <span style="color: #339933;">=</span> <span style="color: #CC0000;">9999</span><span style="color: #339933;">;</span>
			<span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">=</span><span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>coords.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
				<span style="color: #006600; font-style: italic;">// делаем это в цикле, распределяя по чётному и нечётному индексу</span>
				<span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>i<span style="color: #339933;">%</span>2 <span style="color: #339933;">==</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
					<span style="color: #006600; font-style: italic;">// нахождение максимального и минимального числа методом перебора</span>
					max_l <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>max_l <span style="color: #339933;">&lt;</span> Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>max_l<span style="color: #339933;">;</span>
					min_l <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>min_l <span style="color: #339933;">&gt;</span> Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>min_l<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
				<span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span>
					max_t <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>max_t <span style="color: #339933;">&lt;</span> Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>max_t<span style="color: #339933;">;</span>
					min_t <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>min_t <span style="color: #339933;">&gt;</span> Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">?</span>Number<span style="color: #009900;">&#40;</span>coords<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>min_t<span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#125;</span>
			<span style="color: #006600; font-style: italic;">// создаём переменные отвечающие за координаты кружочка,</span>
			<span style="color: #006600; font-style: italic;">// записываем туда среднее значение координат</span>
			<span style="color: #006600; font-style: italic;">// добавляем координаты самой карты и отнимаем половину размера кружочка</span>
			<span style="color: #003366; font-weight: bold;">var</span> left <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>max_l<span style="color: #339933;">+</span>min_l<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> mappos<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;left&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">11</span><span style="color: #339933;">;</span>
			<span style="color: #003366; font-weight: bold;">var</span> top <span style="color: #339933;">=</span> Math.<span style="color: #660066;">floor</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>max_t<span style="color: #339933;">+</span>min_t<span style="color: #009900;">&#41;</span><span style="color: #339933;">/</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> mappos<span style="color: #009900;">&#91;</span><span style="color: #3366CC;">&quot;top&quot;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">11</span><span style="color: #339933;">;</span>
			<span style="color: #006600; font-style: italic;">// помещаем кружочек в документ, добавляем класс текущей активной области (free, sold)</span>
			<span style="color: #006600; font-style: italic;">// прописываем id (хотя может это и лишнее) и записываем в кружочек номер участка</span>
			<span style="color: #003366; font-weight: bold;">var</span> div <span style="color: #339933;">=</span> <span style="color: #3366CC;">'&lt;div class=&quot;overblock '</span> <span style="color: #339933;">+</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;class&quot;</span><span style="color: #009900;">&#41;</span>
			<span style="color: #003366; font-weight: bold;">var</span> <span style="color: #339933;">+=</span> <span style="color: #3366CC;">'&quot; id=&quot;num_'</span> <span style="color: #339933;">+</span> id <span style="color: #339933;">+</span> <span style="color: #3366CC;">'&quot;&gt;'</span> <span style="color: #339933;">+</span> id.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;&lt;/div&gt;&quot;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;body&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">append</span><span style="color: #009900;">&#40;</span>div<span style="color: #009900;">&#41;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#num_&quot;</span> <span style="color: #339933;">+</span> id<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> <span style="color: #3366CC;">&quot;left&quot;</span><span style="color: #339933;">:</span> left<span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;top&quot;</span><span style="color: #339933;">:</span> top <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// прописываем координаты кружочку</span>
			<span style="color: #006600; font-style: italic;">// добавляем события при наведении мышки на кружочек</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#num_&quot;</span> <span style="color: #339933;">+</span> id<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hover</span><span style="color: #009900;">&#40;</span>
				<span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					add_highlight<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
				<span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
					remove_highlight<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				<span style="color: #009900;">&#125;</span>
			<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #009900;">&#125;</span></pre></div></div>

<h4>2. Дополнительные функции</h4>
<h4> Пишем две очень простые функции добавления подсветки кружочкам</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> add_highlight<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#num_&quot;</span> <span style="color: #339933;">+</span> id<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;selected&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #003366; font-weight: bold;">function</span> remove_highlight<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#num_&quot;</span> <span style="color: #339933;">+</span> id<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">removeClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;selected&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

</h4>
<h4>Запуск документа. Добавление событий каждому &lt;area&gt;</h4>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span>
	<span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
		add_numbers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #006600; font-style: italic;">// запускаем описанную выше функцию</span>
		<span style="color: #006600; font-style: italic;">// каждому area добавляем событие rollover'а в котором добавляем подсветку кружочку</span>
		<span style="color: #006600; font-style: italic;">// при наведении на всю область, а не только на кружочек</span>
		$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;area&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hover</span><span style="color: #009900;">&#40;</span>
			<span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #003366; font-weight: bold;">var</span> id <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;href&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				add_highlight<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span><span style="color: #339933;">,</span>
			<span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
				<span style="color: #003366; font-weight: bold;">var</span> id <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;href&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">substring</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
				remove_highlight<span style="color: #009900;">&#40;</span>id<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
			<span style="color: #009900;">&#125;</span>
		<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#41;</span></pre></div></div>

<p>Как видите, пришлось продублировать подсветку кружочка, при наведении на область и при наведении на сам кружочек.</p>
<h4>Изменение размеров окна</h4>
<p>Если у нас центрированная фиксированная вёрстка, то при изменении размеров окна кружочки сдвигаются. Чтобы этого не было, придётся дописать одну функцию удаляющую все кружочки, а так же написать событие resize в котором запустим функцию удаления кружочков и добавления их заново. Конечно это форменное читерство, но мне было лень переписывать получение координат &lt;area&gt; и добавление координат кружочкам в отдельную функцию. Поэтому я сделал так:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #006600; font-style: italic;">// функция удаления кружочков</span>
<span style="color: #003366; font-weight: bold;">function</span> remove_numbers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div[class*='overblock']&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span>
		<span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
			$<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">remove</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
		<span style="color: #009900;">&#125;</span>
	<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #006600; font-style: italic;">// при изменении размеров окна удаляем и добавляем кружочки заново</span>
$<span style="color: #009900;">&#40;</span>window<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">resize</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	remove_numbers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	add_numbers<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<h3>Минусы</h3>
<ul>
<li>При изменении размеров окна передобавление кружочков тормозит в IE.</li>
<li>Подсвечивается не вся область, а только кружочки</li>
</ul>
<p>Функциональность можно расширить, например добавить подсветку данных в таблице, это сделано на <a href="http://jaunsapni.merapi.lv/plans.php">Jaunsapņi</a>.</p>
<p><a href="http://www.cssplay.co.uk/menu/old_master.html">Альтернативный вариант imagemapping&#8217;а предлагает CSSPlay</a>, сделать карту с помощью CSS, но там все координаты пишутся вручную и области могут быть только прямоугольными.</p>
<p>Исправляем и упрощаем <a href="http://www.seleckis.lv/journal/javascript/js-imagemapping-ispravlenno">в следующем посте.</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.seleckis.lv/journal/javascript/aktivnyiy-imagemapping-na-jquery/feed</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Всплывающая подсказка v.2</title>
		<link>http://www.seleckis.lv/journal/javascript/vsplyvayushhaya-podskazka-v2</link>
		<comments>http://www.seleckis.lv/journal/javascript/vsplyvayushhaya-podskazka-v2#comments</comments>
		<pubDate>Mon, 17 Sep 2007 13:34:22 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.seleckis.lv/journal/javascript/vsplyvayushhaya-podskazka-v2</guid>
		<description><![CDATA[Вспоминаем мой давний пост про плавающую над объектами подсказку.
Феатурес:

Вторая версия написана с использованием библиотеки jQuery (кстати, очень рекомендую обратить внимание, не такая громоздкая как Prototype)
Запуск скрипта осуществялется средставми jQuery, в сам html-файл ничего не нужно вписывать
В настройках скрипта можно указать в каких тэгах будет работать подсказка
Подсказки прописываются в атрибут rel, хотя можно использовать любой другой [...]]]></description>
			<content:encoded><![CDATA[<p>Вспоминаем мой давний пост <a href="http://www.seleckis.lv/archive/scripting/tooltip-javascript">про плавающую над объектами подсказку</a>.</p>
<p><strong>Феатурес:</strong></p>
<ul>
<li>Вторая версия написана с использованием библиотеки <a href="http://jquery.com/">jQuery </a>(кстати, очень рекомендую обратить внимание, не такая громоздкая как <a href="http://www.prototypejs.org/">Prototype</a>)</li>
<li>Запуск скрипта осуществялется средставми jQuery, в сам html-файл ничего не нужно вписывать</li>
<li>В настройках скрипта можно указать в каких тэгах будет работать подсказка</li>
<li>Подсказки прописываются в атрибут <strong>rel</strong>, хотя можно использовать любой другой атрибут, например <strong>title</strong> или <strong>alt</strong>, достаточно прописать его в настройках скрипта. Проблема только в валидации кода</li>
<li>Добавлена функция простого парсинга, заменяющего знаки &#8220;[" на "&lt;" и "]&#8221; на &#8220;&gt;&#8221;, чтобы можно было добавлять в подсказки простые псевдо-тэги</li>
<li>Проверено в браузерах: <strong>Mozilla Firefox 2.0.0.6, Opera 9.23, Internet Explorer 5.5+, Safari 3.0.3, Swift 0.2 </strong></li>
</ul>
<p>Ну вот вроде и всё. <a target="_blank" href="http://www.seleckis.lv/wp-content/themes/seleckis_v2/NS_tooltip/ns_tooltip.html">Смотрим работающий пример.</a></p>
<p><a href='http://www.seleckis.lv/wp-content/uploads/2007/09/ns_tooltip_jquery.zip' title='ns_tooltip_jquery.zip'>Качаем исходник</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.seleckis.lv/journal/javascript/vsplyvayushhaya-podskazka-v2/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>Замена подстрок с помощью JavaScript v.2</title>
		<link>http://www.seleckis.lv/journal/javascript/zamena-podstrok-s-pomoshhyu-javascript-v2</link>
		<comments>http://www.seleckis.lv/journal/javascript/zamena-podstrok-s-pomoshhyu-javascript-v2#comments</comments>
		<pubDate>Thu, 06 Sep 2007 10:56:41 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.seleckis.lv/journal/javascript/zamena-podstrok-s-pomoshhyu-javascript-v2</guid>
		<description><![CDATA[Не string&#8217;ом единым&#8230;
Пересмотрел я скрипт написаный мною в прошлой статье и теперь с некоторыми изменениями выкладываю вновь.
Теперь в качестве поиска используется регулярное выражение игнорирующее вхождения подстроки между символами тэга (&#8220;&#8220;), что означает что замена не будет применяться к самим тэгам.
Кроме этого к объекту поиска добавил флаг (параметр &#8216;flag&#8217;), который может быть равен &#8220;i&#8221; &#8211; игнорировать [...]]]></description>
			<content:encoded><![CDATA[<p><em>Не string&#8217;ом единым&#8230;</em></p>
<p>Пересмотрел я скрипт написаный мною в прошлой статье и теперь с некоторыми изменениями выкладываю вновь.</p>
<p>Теперь в качестве поиска используется регулярное выражение игнорирующее вхождения подстроки между символами тэга (&#8220;<" и ">&#8220;), что означает что замена не будет применяться к самим тэгам.</p>
<p>Кроме этого к объекту поиска добавил флаг (параметр &#8216;flag&#8217;), который может быть равен &#8220;i&#8221; &#8211; игнорировать регистр. Это в рамках правил регулярных выражений. Логично что вы не будуте использовать параметр &#8220;i&#8221; если вам нужно поменять регистр у букв. Отмечу так же, что в поиске не используется флаг &#8220;g&#8221;. Глобальный поиск реализован с помощью цикла (см. цикл <strong>while</strong>).</p>
<h3>Код</h3>
<p><code><br />
symbols = new Array();<br />
symbols[1] = { 'search' : 'k', 'replace' : 'K', 'flag' : '' }<br />
symbols[2] = { 'search' : 'br', 'replace' : 'hr', 'flag' : 'i' }<br />
symbols[3] = { 'search' : 'block', 'replace' : 'inline', 'flag' : 'i' }<br />
</code><br />
<code><br />
function sym_Replace()<br />
{<br />
	for (sym in symbols)<br />
	{<br />
		expr = new Array()<br />
		expr = "([^(&lt;.*?)]*)(" + symbols[sym]['search'] + ")([^(.*?&gt;)]*)"<br />
		srch = new RegExp(expr, symbols[sym]['flag'])<br />
		replace = "$1" + symbols[sym]['replace'] + "$3";<br />
		block = document.getElementsByTagName("p")<br />
		for (i=0; i&lt;block.length; i++)<br />
		{<br />
			text = block[i].innerHTML<br />
			while(srch.test(text)){<br />
				text = text.replace(srch, replace);<br />
			}<br />
			block[i].innerHTML = text<br />
		}<br />
	}<br />
}<br />
</code></p>
<p>Запускается функция как обычно:</p>
<p><code>&lt;body onload="sym_Replace()"&gt;</code><br />
Прошу, кто может, сделайте дебаг.</p>
<h3>Плагин для Wordpress?</h3>
<p>Не думаю, что этот небольшой скриптик нужно оформлять как плагин для Wordpress. На самом деле, в <a target="_blank" href="http://wordpress.org/extend/plugins/search.php?q=replace">репозитории Wordpress&#8217;a</a> уже есть плагины выполняющие замену в тексте и постов и комментариев на уровне php.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.seleckis.lv/journal/javascript/zamena-podstrok-s-pomoshhyu-javascript-v2/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
