<?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>CTAPbIu_MABP&#039;s BLOG &#187; HTML</title>
	<atom:link href="http://mabp.kiev.ua/category/programming/html/feed/" rel="self" type="application/rss+xml" />
	<link>http://mabp.kiev.ua</link>
	<description>энтузиазм = 1/опыт © Старый Мавр</description>
	<lastBuildDate>Thu, 26 Jan 2012 10:34:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>New Social Communications</title>
		<link>http://mabp.kiev.ua/2011/03/31/new-social-communications/</link>
		<comments>http://mabp.kiev.ua/2011/03/31/new-social-communications/#comments</comments>
		<pubDate>Thu, 31 Mar 2011 13:21:13 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1351</guid>
		<description><![CDATA[Ребята нашли меня через сообщение в твитере простоплеера и попросили сделать для них верстку. Хорошие, приятные макеты в стиле творческого минимализнма. Немного яваскрипта в стиле от Мавра, с забытыми консолями. Потом еще пара правок после вставки реального контента и все готово. Посмотреть можно на их сайте New Social Communications.]]></description>
			<content:encoded><![CDATA[<p>Ребята нашли меня через сообщение в твитере <a href="http://mabp.kiev.ua/2011/03/17/prostopleer/">простоплеера</a> и попросили сделать для них верстку. Хорошие, приятные макеты в стиле творческого минимализнма. Немного яваскрипта в стиле от Мавра, с забытыми консолями. Потом еще пара правок после вставки реального контента и все готово. Посмотреть  можно на их сайте <a href="http://www.newsocial.com.ua/" rel="external nofollow">New Social Communications</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2011/03/31/new-social-communications/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>таблица на дивах</title>
		<link>http://mabp.kiev.ua/2011/03/23/table-with-divs/</link>
		<comments>http://mabp.kiev.ua/2011/03/23/table-with-divs/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 17:48:56 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1335</guid>
		<description><![CDATA[Писал для одной не no-name компании табличку на дивах. Решил что для этого как нельзя лучше подойдет YUI-grids, но в данном примере я его удалил, хотя для того чтобы его вернуть достаточно посмотреть каменты в коде и все станет ясно. Как вы понимаете в осле вся красота от border-radius (тут классы от jquery UI) и [...]]]></description>
			<content:encoded><![CDATA[<p>Писал для одной не no-name компании табличку на дивах.</p>
<span id="more-1335"></span>

<p>Решил что для этого как нельзя лучше подойдет YUI-grids, но в данном примере я его удалил, хотя для того чтобы его вернуть достаточно посмотреть каменты в коде и все станет ясно.</p>

<p>Как вы понимаете в осле вся красота от border-radius (тут классы от jquery UI) и box-shadow недоступна, поэтому graceful degradation. Хотя при большом желании на таблицу ложатся круглые углы от <a href="http://mabp.kiev.ua/2011/03/03/rocon-fix/">rocon</a></p>

<link rel="stylesheet" type="text/css" media="screen" href="/content/css/table-with-divs.css"/>

<div id="cardsTable" class="table ui-corner-all">
	<div class="thead ui-corner-top">
		<div class="tr ui-corner-all">
			<div class="th">Col 1</div>
			<div class="th">Col 2</div>
			<div class="th">Col 3</div>
			<div class="th last-child">Col 4</div>
		</div>
	</div>
	<div class="tbody">
		<div class="tr yui3-g even">
			<div class="td">Val 1-1</div>
			<div class="td">Val 1-2</div>
			<div class="td">Val 1-3</div>
			<div class="td last-child">Val 1-4</div>
		</div>
		<div class="tr yui3-g odd">
			<div class="td">Val 2-1<br/>212</div>
			<div class="td">Val 2-2</div>
			<div class="td">Val 2-3</div>
			<div class="td last-child">Val 2-4<br/>242</div>
		</div>
		<div class="tr yui3-g even">
			<div class="td">Val 3-1</div>
			<div class="td">Val 3-2</div>
			<div class="td">Val 3-3</div>
			<div class="td last-child">Val 3-4</div>
		</div>
	</div>
	<div class="tfoot ui-corner-bottom">
		<div class="th"></div>
	</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2011/03/23/table-with-divs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ПростоПлеер</title>
		<link>http://mabp.kiev.ua/2011/03/17/prostopleer/</link>
		<comments>http://mabp.kiev.ua/2011/03/17/prostopleer/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 00:28:41 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Разное]]></category>
		<category><![CDATA[События]]></category>
		<category><![CDATA[audio]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1331</guid>
		<description><![CDATA[Совсем забыл что в середине февраля помогал Артёму Василькову с ПростоПлеером. Исправил пару багов с плэйлистом и заодно поимел интересный опыт работы с soundmanager2 и рекламу в его твитере. Так что теперь больше не боюсь работы со звуком в браузере.]]></description>
			<content:encoded><![CDATA[<p>Совсем забыл что в середине февраля помогал Артёму Василькову с <a href="http://prostopleer.com/" rel="nofollow external">ПростоПлеером</a>. Исправил пару багов с плэйлистом и заодно поимел интересный опыт работы с <a href="http://www.schillmania.com/projects/soundmanager2/" rel="nofollow external">soundmanager2</a> и рекламу в его <a href="http://twitter.com/#!/prostopleer" rel="nofollow external">твитере</a>. Так что теперь больше не боюсь работы со звуком в браузере.</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2011/03/17/prostopleer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lavalamp</title>
		<link>http://mabp.kiev.ua/2010/11/27/lavalamp/</link>
		<comments>http://mabp.kiev.ua/2010/11/27/lavalamp/#comments</comments>
		<pubDate>Sat, 27 Nov 2010 16:06:10 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jqueryUI]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1308</guid>
		<description><![CDATA[Незнаю в силу каких обстоятельств сложилось что при поиске данного эффекта все ссыки рано или позно заканчиваються тут. Возможно потому что этот плагин был первым, возможно потому что потому что эффект действительно похож на лавовую лампу. В обoем это не важно моя статья тоже веден на этот плагин ;) Так вот есть у этого плагина [...]]]></description>
			<content:encoded><![CDATA[<p>Незнаю в силу каких обстоятельств сложилось что при поиске данного эффекта все ссыки рано или позно заканчиваються <a href="http://www.gmarwaha.com/blog/2007/08/23/lavalamp-for-jquery-lovers/" rel="nofollow external">тут</a>. Возможно потому что этот плагин был первым, возможно потому что потому что эффект действительно похож на лавовую лампу. В обoем это не важно моя статья тоже веден на этот плагин ;)<p>

<span id="more-1308"></span>

<link rel="stylesheet" type="text/css" media="screen" href="/content/css/lavalamp.css"/>
<script type="text/javascript" src="/content/js/lavalamp.js"></script>


<p>Так вот есть у этого плагина большой недостаток - он однострочный и все похожие плагины тоже, тоесть если у меня менюшка в две строки то хрен мне. Надо было срочно исправить недоразумение и я написал свой.<p>

<ul id="lavalamp" class="ui-corner-all">
<li style="top:60px;left:20px" class="active"><span class="text">Один</span></span></li>
<li style="top:40px;left:150px"><span class="text">Два</span></li>
<li style="top:10px;left:50px"><span class="text">Три</span></li>
<li style="top:60px;left:100px"><span class="text">Четыре</span></li>
<li style="top:120px;left:10px"><span class="text">Пять</span></li>
<li style="top:10px;left:150px"><span class="text">Шесть</span></li>
<li style="top:100px;left:100px"><span class="text">Семь</span></li>
</ul>

<div id="lava" class="ui-corner-all"></div>

<p>Код такой<p>
<pre><code class="html">
&lt;ul id="lavalamp" class="ui-corner-all"&gt;
&lt;li style="top:60px;left:20px" class="active"&gt;&lt;span class="text"&gt;Один&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="top:40px;left:150px"&gt;&lt;span class="text"&gt;Два&lt;/span&gt;&lt;/li&gt;
&lt;li style="top:10px;left:50px"&gt;&lt;span class="text"&gt;Три&lt;/span&gt;&lt;/li&gt;
&lt;li style="top:60px;left:100px"&gt;&lt;span class="text"&gt;Четыре&lt;/span&gt;&lt;/li&gt;
&lt;li style="top:120px;left:10px"&gt;&lt;span class="text"&gt;Пять&lt;/span&gt;&lt;/li&gt;
&lt;li style="top:10px;left:150px"&gt;&lt;span class="text"&gt;Шесть&lt;/span&gt;&lt;/li&gt;
&lt;li style="top:100px;left:100px"&gt;&lt;span class="text"&gt;Семь&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div id="lava" class="ui-corner-all"&gt;&lt;/div&gt;
</code></pre>

<pre><code class="css">
#lavalamp {
	display: block;
	height: 150px;
	border: 5px solid #FF7F04;
	background: #ff7f04; /* old browsers */
	background: -moz-linear-gradient(top, #ff7f04 0%, #ffb76b 99%); /* firefox */
	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ff7f04), color-stop(99%,#ffb76b)); /* webkit */
	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff7f04', endColorstr='#ffb76b',GradientType=0 ); /* ie */
}

    #lavalamp li {
		color: #808080;
		cursor: pointer;
		display: block;
		float: left;
		height: 25px;
		position: relative;
		z-index: auto;
		padding: 0;
    }

        #lavalamp li span {
			display: block;
			font-size: 14px;
			font-weight: bold;
			line-height: 25px;
			position: relative;
			text-decoration: none;
			z-index: 200;
			padding: 0 5px;
        }

#lava {
	background-color: #e57807;
	position:absolute;
	left:0;
	top:0;
	height:0;
	width:0;
	z-index:100;
}
</code></pre>
<p>Градиент сделан при помощи тулзы <a href="http://www.colorzilla.com/gradient-editor/" rel="nofollow external">Ultimate CSS Gradient Generator</a><p>

<pre><code class="javascript">
jQuery(document).ready(function($){
	$("#lavalamp")
		.delegate("li","mouseenter",null,function(){
			var self = $(this);
			$("#lava").stop().animate({
				top : self.offset().top,
				left : self.offset().left,
				width : self.outerWidth(true),
				height : self.outerHeight(true)
			})
		})
		.delegate("li","click",null,function(){
			alert($(this).text());
		})
		.bind("mouseleave",null,function(){
			$(".active",this).eq(0).trigger("mouseover");
		})
		.trigger("mouseout");
});
</code></pre>

<p><p>
<p><p>
<p><p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2010/11/27/lavalamp/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>UFI</title>
		<link>http://mabp.kiev.ua/2010/10/17/ufi/</link>
		<comments>http://mabp.kiev.ua/2010/10/17/ufi/#comments</comments>
		<pubDate>Sun, 17 Oct 2010 14:09:13 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1270</guid>
		<description><![CDATA[Украина Футбол Интернешнл скоро будет иметь ахуительный новый сайт. На нем можно будет заказать билеты онлайн. Но ахуителен он не этим, а тем что за него взялся я. Пока что юзал только YUI grid + reset дальше глянем. Это пока тока первый мокап.]]></description>
			<content:encoded><![CDATA[<p>Украина Футбол Интернешнл скоро будет иметь ахуительный новый сайт. На нем можно будет заказать билеты онлайн. Но ахуителен он не этим, а тем что за него взялся я.</p>
<span id="more-1270"></span>
<div style="text-align:center;"><img src="/content/img/ufi/ufi.jpg" alt="UFI"/></div>
<div style="text-align:center;"><img src="/content/img/ufi/ufi2.jpg" alt="UFI"/></div>

<p>Пока что юзал только <a href="http://developer.yahoo.com/yui/build/reset-fonts-grids/reset-fonts-grids.css" rel="nofollow external">YUI grid + reset</a> дальше глянем. Это пока тока первый мокап.</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2010/10/17/ufi/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>jQuery scroll plugin</title>
		<link>http://mabp.kiev.ua/2009/07/03/jquery-scroll-plugin/</link>
		<comments>http://mabp.kiev.ua/2009/07/03/jquery-scroll-plugin/#comments</comments>
		<pubDate>Fri, 03 Jul 2009 13:17:14 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[UI plugin]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=1081</guid>
		<description><![CDATA[Нашел в понедельник плагин для mootools который заменяет обычную полосу прокрутки. Очень понравилась идея, и очень не понравилась реализация, ОЧЕНЬ много кода у чувака вышло на какой-то скроллинг. У меня был махонький опыт работы со скроллингом в плагине автокомплит и я решил переписать все с нуля на jQuery. Идея была хорошая, реализация - гавно. Сидел [...]]]></description>
			<content:encoded><![CDATA[<p>Нашел в понедельник <a href="http://greengeckodesign.com/projects/mooscroll/examples/example1/" rel="nofollow external">плагин</a> для mootools который заменяет обычную полосу прокрутки. Очень понравилась идея, и очень не понравилась реализация, ОЧЕНЬ много кода у чувака вышло на какой-то скроллинг. У меня был махонький опыт работы со скроллингом в плагине <a href="http://mabp.kiev.ua/2008/04/08/autocomplete/">автокомплит</a> и я решил переписать все с нуля на <a href="http://mabp.kiev.ua/tag/jquery/">jQuery</a>.</p>
<p>Идея была хорошая, реализация - гавно. Сидел писал... Разруливал грабли.</p>

<span id="more-1081"></span>

<link   href="/content/source/jscroll/jscroll.css"  type="text/css" rel="stylesheet">
<script src="/content/source/jscroll/jquery.mousewheel.js"></script>
<script src="/content/source/jscroll/jquery.jscroll.js"></script>
<script type="text/javascript" src="/content/js/jquery-scroll-plugin.js"></script>


<p>Началось все с чертовой верстки, ее как обычно не понял <a href="http://mabp.kiev.ua/tag/ie/">IE</a>, но там особых проблем не возникло, кое-что через скрипт поправил.</p>
<p>Первой неприятной граблей было отсутствие в <a href="http://mabp.kiev.ua/tag/jquery/">jQuery</a> поддержки колесика мишки, но плагин на этот случай нашелся очень быстро. Обожаю <a href="http://mabp.kiev.ua/tag/jquery/">jQuery</a> за огромное количество плагинов! И не смотря на то что плагин небольшой это уже давало лишний код и лишнюю зависимость для моего плагина. Не айс :(</p>
<p>Второй граблей стал ползунок, на него надо было натянуть drag. Тоесть перетаскивание, писать самому этот гемор я не решился, мне не настолько не хуй делать. Откуда взять драг? Правильно из <a href="http://mabp.kiev.ua/tag/jquery-ui/">jQuery UI</a>. Примастырил я его довольно легко, благо там все просто. Оказалось еще два дополнительных файла (core и draggable) и килобайты лишнего кода. Мне это очень не понравилось, но ничего поделать я не мог.</p>
<p>Этот же ползунок надо было перемещать под мышку при клике на полоску прокрутки. Как мудак, почти целый день втыкал в формулу зависимости высоты ползунка от длинны текста, координат ползунка на полосе прокрутки и пытался сместить его на половину его высоты вверх чтобы он попадал на мышку центром. Потом только понял что то координата ползунка не зависит от длины полоски и ничего смещать не надо, она зависит от места куда кликнули. Как тока понял все быстро срослось. О чем я написал <a href="http://mabp.kiev.ua/2009/07/02/maximum-minimum/">прошлую заметку</a></p>
<p>Ок, ползунок стал куда ему требовалось теперь надо было из скрипта активировать событие drag. Поначалу даже не знал с чего начать, пробовал вызывать события mousedown и mousemove по очереди, потом вызвать их оба сразу, никаких результатов. Полез в код UI разбираться. От туда как-то вытащил событие "mousedown.draggable", попытался его вызвать через trigger, получил ошибку о зациклившейся рекурсии. Долго ругался. Гуглил. Узнал что так можно было делать еще в версии 1.5.3, а теперь это перекрыли. Авторы советуют использовать <a href="http://jqueryjs.googlecode.com/svn/trunk/plugins/simulate/jquery.simulate.js" rel="nofollow external">плагин симуляции пользователя</a>. Долго ругался на дополнительный код, хотел из него что-то удалить, плюнул, поставил. Ура! Заработало. Потом уже во время написания статьи и проверки в <a href="http://mabp.kiev.ua/tag/ie/">IE</a> и других браузерах оказалось что работает этот чудо-плагин тока в <a href="http://mabp.kiev.ua/tag/firefox/">FireFox'e</a>. Н у и хуй с ним, всеравно в оригинальном плагине так не работало.</p>
<p>Пока гуглил решение проблемы с drag'ом нашел <a href="http://plugins.jquery.com/project/drag" rel="nofollow external">плагин</a> который реализовывает этот же функционал и вроде как гибче в настройках. Поставил, легче не стало, зато кода вроде уменьшилось и не надо использовать весь UI. В общем оставил в коде закомментированным кусок для подключения плагина. кто хочет может ебаться.</p>
<p>Так я похоже уже всех замариновал пиздежом не по теме. Выкладываю рабочий пример. Цацкайтесь.</p>

<div class="scroll" style="width:500px;">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut id eros eget dui tincidunt aliquam. Nulla mollis, erat suscipit pellentesque bibendum, nulla risus ultrices tellus, laoreet lobortis libero urna sit amet sem. Nunc placerat augue in felis condimentum fringilla. Mauris in sapien quis dolor sagittis pretium sit amet quis ante. Suspendisse elit arcu, pellentesque eget suscipit et, pharetra sit amet massa. Integer ut tortor sed tortor accumsan venenatis quis a ipsum. Aliquam erat volutpat. Mauris varius tincidunt tortor, sed feugiat enim lobortis eu. Aenean vitae metus augue, vel auctor mi. Cras sapien augue, interdum dignissim eleifend vel, porttitor eget ante. Cras feugiat varius ante, vel tincidunt quam congue ac. Aenean id purus nec diam sodales dignissim sit amet id turpis. Curabitur dignissim tincidunt euismod. Fusce euismod iaculis placerat. Donec consectetur ultrices semper. Pellentesque tellus ipsum, ultricies at fermentum sit amet, volutpat sit amet libero. Curabitur id lacus ipsum. Aliquam vulputate, est in mattis porttitor, lectus ante blandit turpis, vitae luctus felis purus vel libero.</p>

<p>Nulla velit augue, rutrum eu egestas rhoncus, aliquam at ante. Ut in dolor non orci malesuada commodo vitae non sem. Vestibulum quis neque ut massa tempus aliquet. Sed congue est sed arcu molestie consequat. Aenean eget dapibus lorem. Suspendisse tempor sem sit amet urna fermentum nec aliquam massa aliquet. Curabitur quis risus non est tincidunt congue id in neque. Nulla vel lorem ipsum. Nullam laoreet odio id nibh molestie sagittis eu ut ipsum. Donec ut risus vitae ante gravida lacinia. Integer quis enim massa. Donec ligula arcu, facilisis eget scelerisque et, dapibus non turpis. Maecenas quis orci tortor, sit amet porttitor leo.</p>

<p>Donec ullamcorper nisl dapibus mi semper non congue nunc luctus. Curabitur vitae erat neque, sed tincidunt arcu. Donec sodales rhoncus lectus et condimentum. Etiam dignissim odio a diam luctus congue. Nam vel tortor odio. Ut eu rutrum nibh. Pellentesque urna velit, laoreet quis semper eget, tempus non urna. Nam commodo turpis eget diam suscipit eget pulvinar diam auctor. Maecenas eu velit facilisis velit convallis vehicula vel sed nibh. Vivamus at ultricies justo. Ut eleifend libero eget leo varius sed aliquam turpis semper. Praesent dui sem, suscipit vel convallis et, pretium at dolor. Maecenas mollis pharetra metus, tempus luctus lacus tristique sit amet. Donec scelerisque ultrices varius.</p>
</div>

<p>Будет настроение буду доделывать... Уберу чертов плагин симуляции, всеравно не пашет... Потом там есть бага, когда сначала кликнул на полосу прокрутки, а потом на стрелку вверх, ползунок чуть вниз зъезжает. Посмотрим может не лень будет.</p>
<p><strong>Добавлено 04.06.09 в 2 ночи.</strong> После 2 часов дебага обнаружил что плагин симуляции пользователя корректно работает только если виджет расположен на первом экране, то есть сама страницы с виждетом не проскроллена. После чего все воспоминания про плагин были выкинуты из кода. Застрелите меня.</p>
<p><strong>Добавлено 05.06.09 в 12 ночи.</strong> Наконец-то доделал. Теперь скроллинг полностью имитирует поведение виндового скроллинга. И его можно применять не только к отдельному элементу но и ко всей странице.</p>
<pre><code class="javascript">
    jQuery().ready(function($) {
      $().jscroll(); // document
    });
</code></pre>
<p>Размер моего плагина (не сжатым) 6 424 байт, а размер оригинального 23 076. При этом размер всех подключаемых js файлов (сжатых) у jquery 91 725, а у mootools 96 157 байт.</p>
<p><strong>Добавлено 06.06.09 в 20:00.</strong> Добавлена поддержка IE 7 &#038; 8. В IE 6 неправильно возвращается свойство scrollHeight, поэтому скроллинг глючит.</p>

<p>Скачать сие чудо с примерами работы можно отсюда <a href="http://mabp.kiev.ua/content/source/jscroll/jscroll-3.zip">DOWNLOAD LINK</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/07/03/jquery-scroll-plugin/feed/</wfw:commentRss>
		<slash:comments>79</slash:comments>
		</item>
		<item>
		<title>jQuery UI: Progress Bar with custom event</title>
		<link>http://mabp.kiev.ua/2009/03/26/jquery-ui-progress-bar-with-custom-event/</link>
		<comments>http://mabp.kiev.ua/2009/03/26/jquery-ui-progress-bar-with-custom-event/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 14:29:21 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jqueryUI]]></category>
		<category><![CDATA[progress bar]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=928</guid>
		<description><![CDATA[Начитался Брэндона Аарона и решил создать небольшое практическое пособие для начинающих по пользовательским событиям (custom events). Напомню что пользовательские события это такие же события как onclick только запускает их не браузер а сам jQuery. Такими событиями являются, например, события "mouseenter", "mouseleave", "ready" и целый набор ajax'овых событий. jQuery также дает возможность создавать пользовательские события, чем [...]]]></description>
			<content:encoded><![CDATA[<p>Начитался <a href="http://brandonaaron.net/blog/2009/03/26/special-events" rel="nofollow external">Брэндона Аарона</a> и решил создать небольшое практическое пособие для начинающих по пользовательским событиям (custom events). Напомню что пользовательские события это такие же события как onclick только запускает их не браузер а сам <a href="http://mabp.kiev.ua/tag/jquery/" title="jQuery">jQuery</a>. Такими событиями являются, например, события "mouseenter", "mouseleave", "ready" и целый набор <a href="http://docs.jquery.com/Ajax_Events" rel="nofollow external">ajax'овых событий</a>. 
<p><a href="http://mabp.kiev.ua/tag/jquery/" title="jQuery">jQuery</a> также дает возможность создавать пользовательские события, чем я и воспользуюсь, создав собственное событие с помощью которого буду обновлять ползунок из <a href="http://mabp.kiev.ua/2009/01/28/modal-dialog-and-progress-bar/">Modal Dialog и Progress Bar</a>. Практическая польза от этого скрипта нулевая, но для демонстрации самое то что доктор прописал. На самом деле весь код описанный в событии можно перенести в стандартный callback 'change'. Итак задача: обновлять ползунок при помощи пользовательского события, при срабатывании события ползунок увеличивается и меняет цвет.</p>
<span id="more-928"></span>

<link rel="stylesheet" type="text/css" media="screen" href="/content/css/jquery-ui-progress-bar-with-custom-event.css"/>
<script type="text/javascript" src="/content/js/jquery-ui-progress-bar-with-custom-event.js"></script>


<pre><code class="html">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
&lt;head&gt;
&lt;title&gt;Progress Bar with custom event&lt;/title&gt;
&lt;script src="jquery-1.3.2.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="ui/ui.core.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="ui/ui.resizable.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="ui/ui.draggable.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="ui/ui.dialog.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="ui/ui.progressbar.js" type="text/javascript"&gt;&lt;/script&gt;

&lt;link href="themes/smoothness/ui.core.css" type="text/css" rel="stylesheet" /&gt;
&lt;link href="themes/smoothness/ui.theme.css" type="text/css" rel="stylesheet" /&gt;
&lt;link href="themes/smoothness/ui.resizable.css" type="text/css" rel="stylesheet" /&gt;
&lt;link href="themes/smoothness/ui.dialog.css" type="text/css" rel="stylesheet" /&gt;
&lt;link href="themes/smoothness/ui.progressbar.css" type="text/css" rel="stylesheet" /&gt;

&lt;style&gt;
.ui-progressbar-indicator{
	line-height:40px;
	position:absolute;
	text-indent:-20px;
	left:50%;
}
&lt;/style&gt;

&lt;script type="text/javascript"&gt;
jQuery().ready(function($){

	var counter = 0, 
	dialog = $("&lt;div/&gt;")
		.dialog({modal:true,title:"Заголовок",overlay:{backgroundColor:'#000',opacity: 0.5}})
		.parent().find(".ui-dialog-titlebar-close").hide().end().end(),
	indicator = $("&lt;div/&gt;").addClass("ui-progressbar-indicator").text("0").appendTo(dialog),
	// создаю пользовательское событие myEvent
	// вторым параметром можно передавать null потому что он не используеться в примере
	// но я предпочитаю передавать this, тут this является контекстом функцией переданой параметром в jQuery().ready
	// тоесть window, но если этот объект не window то это единственный способ получить к нему доступ.
	// пример такого использования можно посмотреть в плагине autocomplete
	progressbar = $("&lt;div/&gt;").bind("myEvent", this, function(event,data){
			// event.data хранит данные переданые при создании события
			// тоесть event.data == window
			// data хранит данные переданые при срабатывании события 
			// тоесть data == {counter:counter}
			var 	c = data.counter,
				// процет цвета который заполняет ползунок
				seed = Math.round(255*c/100),
				// в HEX
				green = seed.toString(16),
				// форматируем до двух знаков
				green = green.length == 1 ? "0"+green : green,
				// процент цвета который покидает ползунок
				red = (255 - seed).toString(16),
				// его тоже форматируем
				red = red.length == 1 ? "0"+red : red;
			// увеличиваез значение индикатора
			indicator.text(c+"%");
			// удлиняем ползунок
			$(this).progressbar("value",counter);
			// закрашиваем ползунок новым цветом
			$("div",this).css({background:"#"+red+green+"00"});
		})
		.progressbar({value:0})
		.appendTo(dialog),
	// имитируем длительный процесс
	interval = setInterval(function () {
		counter+=1;
		progressbar.trigger("myEvent",{counter:counter});
		if (counter == 100) {
			clearInterval(interval);
			setTimeout(function(){
				progressbar.progressbar("destroy");
				dialog.dialog("destroy");
				indicator.remove();
			},50);
		}
	}, 50);
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<input type="button" id="example" value="Позырить результат"/>
<br />
<p>Более подробные комментарии можно посмотреть в <a href="http://mabp.kiev.ua/2009/01/28/modal-dialog-and-progress-bar/">Modal Dialog и Progress Bar</a></p>
<br />]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/03/26/jquery-ui-progress-bar-with-custom-event/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>jQuery UI: Google Gears local store setup</title>
		<link>http://mabp.kiev.ua/2009/03/25/jquery-ui-and-googlegears-local-store-setup/</link>
		<comments>http://mabp.kiev.ua/2009/03/25/jquery-ui-and-googlegears-local-store-setup/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 13:31:31 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[animation]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[jqueryUI]]></category>
		<category><![CDATA[Modal Dialog]]></category>
		<category><![CDATA[progress bar]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=926</guid>
		<description><![CDATA[В одной из прошлых статей я рассказывал как совместить Modal Dialog и Progress Bar, теперь пришло время рассказать как это можно использовать. Есть такая штука как Google Gears это интернет акселератор предназначенный по большому счету для продуктов самого Google, таких как почта, календарь, ридер и т.д. Но Google предоставляет возможность устанавливать акселератор и на сторонние [...]]]></description>
			<content:encoded><![CDATA[<p>В одной из прошлых статей я рассказывал как совместить <a href="http://mabp.kiev.ua/2009/01/28/modal-dialog-and-progress-bar/">Modal Dialog и Progress Bar</a>, теперь пришло время рассказать как это можно использовать. Есть такая штука как <a href="http://mabp.kiev.ua/tag/google-gears/">Google Gears</a> это интернет акселератор предназначенный по большому счету для продуктов самого Google, таких как почта, календарь, ридер и т.д. Но Google предоставляет возможность устанавливать акселератор и на сторонние сайты, чем я сейчас и займусь. Самым простым видом акселерации является загрузка в кеш статических файлов, то есть картинок, скриптов и css стилей, хотя теоретически можно загружать и все остальное включая html самой страницы. Я покажу как сделать анимацию загрузки файлов в хранилище <a href="http://mabp.kiev.ua/tag/google-gears/">Google Gears</a>.</p>
<span id="more-926"></span>
<p>Итак начну с начала, мне понадобиться <a href="http://code.google.com/intl/ru/apis/gears/gears_init.js" rel="nofollow external">скрипт</a> который инициализирует <a href="http://mabp.kiev.ua/tag/google-gears/">Google Gears</a>, он написан самим Google и является единственным официальным способом запустить <a href="http://mabp.kiev.ua/tag/google-gears/">Google Gears</a>, и <a href="http://mabp.kiev.ua/tag/jquery-ui/">jQuery UI</a> для создания модального диалога из прошлой статьи. Скрипт создаёт фабрику объектов с которой я буду работать дальше, хотя там и так подробно описано в комментариях. Дальше логика такая - нужно создать новый "склад" и передать все отобранные для кеширования файлы, обновляя после каждого файла ползунок загрузки. Поехали:</p>

<pre><code class="html">
&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt;
&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /&gt;
&lt;head&gt;
&lt;title&gt;GoogleGears local store setup&lt;/title&gt;
&lt;script src="jquery-1.3.2.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="ui/ui.core.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="ui/ui.resizable.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="ui/ui.draggable.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="ui/ui.dialog.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="ui/ui.progressbar.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="http://code.google.com/intl/ru/apis/gears/gears_init.js" type="text/javascript"&gt;&lt;/script&gt;

&lt;link href="themes/smoothness/ui.core.css" type="text/css" rel="stylesheet" /&gt;
&lt;link href="themes/smoothness/ui.theme.css" type="text/css" rel="stylesheet" /&gt;
&lt;link href="themes/smoothness/ui.resizable.css" type="text/css" rel="stylesheet" /&gt;
&lt;link href="themes/smoothness/ui.dialog.css" type="text/css" rel="stylesheet" /&gt;
&lt;link href="themes/smoothness/ui.progressbar.css" type="text/css" rel="stylesheet" /&gt;
&lt;style&gt;
.ui-progressbar-indicator{
	line-height:40px;
	position:absolute;
	text-indent:-20px;
	left:50%;
}
&lt;/style&gt;
&lt;script type="text/javascript"&gt;
if(!window.console)
	console = {info:function(){}};

jQuery().ready(function($){
	// определяю все с чем буду работать
	var 
	localServer, // сервер
	localStore, // хранилище
	counter = 0, // итератор файлов
	percent = 0, // текущий процент
	store = "myStore", // имя хранилища
	filesToCapture = [  ], // список файлов

	// диалог 
	dialog = $("&lt;div/&gt;")
		// с параметрами но на этот раз без кнопки
		.dialog({modal:true,title:"Заголовок",overlay:{backgroundColor:'#000',opacity: 0.5}})
		// и без крестика
		.parent().find(".ui-dialog-titlebar-close").hide().end().end(),

	// с цифровым индикатором
	indicator = $("&lt;div/&gt;").addClass("ui-progressbar-indicator").text("0")
		.appendTo(dialog),

	// и ползунком
	progressbar = $("&lt;div/&gt;")
		// обновляю значение индикатора
		.progressbar({value:0,change:function(event,ui){indicator.text(percent+"%")}})
		.appendTo(dialog);

	try {
		// пробую создать локальный сервер
		localServer = google.gears.factory.create('beta.localserver');
		window.console.info('Ready!');
		// в нем локальное хранилище
		localServer.createStore(store);
		window.console.info('Created the store');
	} catch (e) {
		// при неудаче - выходим
		window.console.info(e.message);
		return;
	}

	// открываем хранилище
	localStore = localServer.openStore(store);
	// передаем в него список файлов
	localStore.capture(filesToCapture, function (url, success, captureId) {
		counter++;
		// считаем текущий процент
		percent = Math.round(counter/filesToCapture.length*100);
		// обновляем ползунок
		progressbar.progressbar("value",percent)
		// если все файлы закешированы чистим ненужное
		if (counter == filesToCapture.length) {
			progressbar.progressbar("destroy"); 
			dialog.dialog("destroy");
			indicator.remove();
		}
		// на всякий случай пишу все в лог
		window.console.info(url + ' captured ' + (success ? 'succeeded' : 'failed'));
	});
});

&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</code></pre>

<p>Примера к сожалению не будет потому что даже если у когото из вас и установлен Google Gears, то у меня нечего особо кешировать, можете посмотреть как выглядит анимация в статье <a href="http://mabp.kiev.ua/2009/01/28/modal-dialog-and-progress-bar/">Modal Dialog и Progress Bar</a></p>
<p>Конечно же интереснее было бы использовать ManagedResourceStore с манифестом, это дает возможность иметь сразу например несколько цветовых схем сайта, но тогда бы не получилось анимировать процесс загрузки.</p>
]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/03/25/jquery-ui-and-googlegears-local-store-setup/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IE мертв. Да здравствует IE!!!</title>
		<link>http://mabp.kiev.ua/2009/03/21/ie-is-dead-long-live-the-ie/</link>
		<comments>http://mabp.kiev.ua/2009/03/21/ie-is-dead-long-live-the-ie/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 15:05:50 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[IE]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=912</guid>
		<description><![CDATA[Все бы уже с радостью похоронили IE6, но сдается мне что не с нашим счастьем. Ведь MicroSoft досих пор тянут за собой мертвый груз IE5.5 засовывая в проекты типа SharePoint вот такие замечательные куски кода. function DeferCall() { if (arguments.length == 0) { return null; } var args = arguments; var fn = null; if [...]]]></description>
			<content:encoded><![CDATA[<p>Все бы уже с радостью похоронили <a href="http://mabp.kiev.ua/tag/ie/">IE6</a>, но сдается мне что не с нашим счастьем. Ведь <a href="http://mabp.kiev.ua/tag/microsoft/">MicroSoft</a> досих пор тянут за собой мертвый груз <a href="http://mabp.kiev.ua/tag/ie/">IE5.5</a> засовывая в проекты типа SharePoint вот такие замечательные куски кода.</p>
<span id="more-912"></span>
<pre><code class="javascript">
function DeferCall() {
	if (arguments.length == 0) {
		return null;
	}
	var args = arguments;
	var fn = null;
	if (browseris.ie5up || browseris.nav6up) {
		eval("if (typeof(" + args[0] + ")=='function') { fn=" + args[0] + "; }");
	}
	if (fn == null) { return null; }
	if (args.length == 1) {
	 return fn();
	} else if (args.length == 2) {
		return fn(args[1]);
	} else if (args.length == 3) {
		return fn(args[1], args[2]);
	} else if (args.length == 4) {
		return fn(args[1], args[2], args[3]);
	} else if (args.length == 5) {
		return fn(args[1], args[2], args[3], args[4]);
	} else if (args.length == 6) {
		return fn(args[1], args[2], args[3], args[4], args[5]);
	} else if (args.length == 7) {
		return fn(args[1], args[2], args[3], args[4], args[5], args[6]);
	} else if (args.length == 8) {
		return fn(args[1], args[2], args[3], args[4], args[5], args[6], args[7]);
	} else if (args.length == 9) {
		return fn(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8]);
	} else if (args.length == 10) {
		return fn(args[1], args[2], args[3], args[4], args[5], args[6], args[7], args[8], args[9]);
	} else {
		var L_TooManyDefers_Text = "Too many arguments passed to DeferCall"
		alert(L_TooManyDefers_Text);
	}
	return null;
}
</code></pre>

<p>А все потому что <a href="http://mabp.kiev.ua/tag/ie/">IE5.5</a> не поддерживает метод Function.apply .</p>
<p>Хотя <a href="http://mabp.kiev.ua/tag/ie/">IE6</a> достал уже всех, вот например Apple сделал себе такую  <a href="http://www.mac.com/1/browser_req.html" rel="nofollow external">страничку</a>, на которой предлагает скачать что-нибудь по современние. Выглядит красиво даже в <a href="http://mabp.kiev.ua/tag/ie/">IE6</a>, но если посмотреть код то там все перехачено вдоль и поперек.</p>
<p>Вот эта страничка меня натолкнула на мысль сверстать похожий "надгробничек" дляя своих целей, используя все то, что использовали разработчики Apple, только без хаков. Смотрите сами что из этого <a href="http://mabp.kiev.ua/content/source/noie/ie.html" rel="nofollow">получилось</a></p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/03/21/ie-is-dead-long-live-the-ie/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Тестирование производительности селекторов jQuery</title>
		<link>http://mabp.kiev.ua/2009/02/21/testing-productivity-jquery-selectors/</link>
		<comments>http://mabp.kiev.ua/2009/02/21/testing-productivity-jquery-selectors/#comments</comments>
		<pubDate>Sat, 21 Feb 2009 15:11:59 +0000</pubDate>
		<dc:creator>CTAPbIu_MABP</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[perfomance]]></category>

		<guid isPermaLink="false">http://mabp.kiev.ua/?p=785</guid>
		<description><![CDATA[Всем известно что jQuery может все. Но далеко не всем известно что jQuery это может несколькими способами. Вот именно об этом я и хочу сегодня поговорить, а заодно проверить какой способ быстрее. Подвергну тестам вышедшую сегодня в свет jQuery 1.3.2, вставленную в страницу результатов Google, общий вес html файла чуть более чем 25кб, все возможные [...]]]></description>
			<content:encoded><![CDATA[<p>Всем известно что <a href="http://mabp.kiev.ua/tag/jquery/">jQuery</a> может все. Но далеко не всем известно что <a href="http://mabp.kiev.ua/tag/jquery/">jQuery</a> это может несколькими способами. Вот именно об этом я и хочу сегодня поговорить, а заодно проверить какой способ быстрее. Подвергну тестам вышедшую сегодня в свет <a href="http://mabp.kiev.ua/tag/jquery/">jQuery 1.3.2</a>, вставленную в страницу результатов Google, общий вес html файла чуть более чем 25кб, все возможные тэги в наличии. Еще хотелось бы акцентировать внимание на том что я не буду использовать псевдо-селектор :not() , так как смысловой нагрузки он не несет, хотя дает еще один способ выбрать элемент.</p>
<span id="more-785"></span>
<p>Первым я протестирую контекст, проверять буду вот таким скриптом</p>

<pre><code class="javascript">
var start = new Date();
for(var i=0;i&lt;1000;i++)
	$....
var stop = new Date();
console.log(stop-start)
</code></pre>

<p>Я не будем добавлять ничего нового к коду Google, а только попробуем собрать коллекцию li.</p>

<style>
.myTbl td {border:1px solid #CCCCCC;}
</style>

<table class="myTbl">
<tr>
<td>$("li", document)</td>
<td>120</td>
</tr><tr>
<td>$("li", "ol")</td>
<td>220</td>
</tr>
</table>

<p>Вывод из первого эксперимента - сам по себе контекст это еще один поиск по DOM дереву, поэтому задавать контекст стоит только если второй запрос ограничит первый на столько что сэкономленное время будет больше чем время второго запроса, такого эффекта можно добиться например указав id родителя (не обязательного прямого) в контексте.</p>

<p>Второй пример покажет как лучше всего получить всех прямых потомков.</p>

<table class="myTbl">
<tr>
<td>$("ol>*")</td>
<td>1800+</td>
</tr><tr>
<td>$("ol>li")</td>
<td>215</td>
</tr><tr>
<td>$("ol").children("li")</td>
<td>330</td>
</tr>
</table>

<p>Не используйте звездочку - это не оправдано в 99.9% случаев (а в этом примере * возвращает еще и затесавшийся случайно элемент link) и не стоит без особой надобности использовать метод children - он тормозит.</p>

<p>В третьем примере я протестирую получение первого прямого потомка.</p>

<table class="myTbl">
<tr>
<td>$("ol>li:first")</td>
<td>375</td>
</tr><tr>
<td>$("ol>li:eq(0)")</td>
<td>380</td>
</tr><tr>
<td>$("ol>li").eq(0)</td>
<td>240</td>
</tr><tr>
<td>$("ol:first-child")</td>
<td>140</td>
</tr><tr>
<td>$("ol:nth-child(1)")</td>
<td>165</td>
</tr><tr>
<td>$("ol").children("li")</td>
<td>330</td>
</tr><tr>
<td>$("ol").find(":first-child")</td>
<td>1500+</td>
</tr><tr>
<td>$("ol").find(":nth-child(1)")</td>
<td>2600+</td>
</tr>
</table>

<p>Не могу найти разумного объяснения почему так тормозит find, но наверное на это есть какие-то причины. А еще интересна разница в использовании eq(0) как селектора и как метода - дольше в полтора раза.</p>

<p>Думаю стоит отвлечся от потомков и протестировать атрибуты. Вытащим input у которых type=radio</p>

<table class="myTbl">
<tr>
<td>$(":radio")</td>
<td>1500+</td>
</tr><tr>
<td>$("[type=radio]")</td>
<td>2400+</td>
</tr><tr>
<td>$("input:radio")</td>
<td>200</td>
</tr><tr>
<td>$("input[type=radio]")</td>
<td>240</td>
</tr><tr>
<td>$("input").filter("[type=radio]")</td>
<td>320</td>
</tr>
</table>

<p>Похоже фильтром тоже не стоит злоупотреблять, а псевдо-селекторы придуманы не только для удобства в написании</p>

<p>Ну и конечно надо доколупаться до классов а то было бы не честно</p>

<table class="myTbl">
<tr>
<td>$("[class^=gac]")
<td>2700+
</tr><tr>
<td>$(".gac_a, .gac_c, .gac_d, .gac_e, .gac_m")
<td>1200+
</tr><tr>
<td>$(".gac_a").add(".gac_c").add(".gac_d").add(".gac_e").add(".gac_m")
<td>1100+</td>
</tr>
</table>

<p>Магия...</p>]]></content:encoded>
			<wfw:commentRss>http://mabp.kiev.ua/2009/02/21/testing-productivity-jquery-selectors/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

