<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0">

<channel>

<title>Техноблог, заметки с тегом: jQueryHelpers</title>
<link>https://blog.toliklunev.ru/tags/jqueryhelpers/</link>
<description></description>
<generator>E2 (v3254; Aegea)</generator>

<item>
<title>Швейцарский нож jQuery-разработчика — jQuery Helpers</title>
<guid isPermaLink="true">https://blog.toliklunev.ru/all/jqueryhelpers/</guid>
<link>https://blog.toliklunev.ru/all/jqueryhelpers/</link>
<comments>https://blog.toliklunev.ru/all/jqueryhelpers/</comments>
<description>&lt;p&gt;Каждый веб-разработчик, работающий с jQuery, со временем начинает собирать удачные решения и ходы, для того, чтобы применять их в будущих проектах. Со временем таких решений накапливается много, некоторые из них перерастают в плагины, а некоторые небольшие, но полезные куски кода копируются из проекта в проект. Похожим образом получилось и у меня. И сейчас я хочу поделиться с вами своими наработками. Надеюсь, для кого-то из вас они тоже окажутся полезными :-)&lt;/p&gt;
&lt;p&gt;Можно &lt;a href="https://github.com/codefucker/jQueryHeplers" target="_blank"&gt;посмотреть на Гитхабе&lt;/a&gt; или сразу &lt;a href="https://github.com/codefucker/jQueryHeplers/archive/master.zip"&gt;скачать&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="#makeActive"&gt;makeActive&lt;/a&gt;&lt;br /&gt;
&lt;a href="#cycle"&gt;cycle&lt;/a&gt;&lt;br /&gt;
&lt;a href="#genHtml"&gt;genHtml&lt;/a&gt;&lt;br /&gt;
&lt;a href="#insertCount"&gt;appendCount, prependCount&lt;/a&gt;&lt;br /&gt;
&lt;a href="#onlyDigits"&gt;onlyDigits&lt;/a&gt;&lt;br /&gt;
&lt;a href="#parseInt"&gt;parseInt, parseFloat&lt;/a&gt;&lt;br /&gt;
&lt;a href="#breakdown"&gt;breakdown&lt;/a&gt;&lt;br /&gt;
&lt;a href="#cleaner"&gt;cleaner&lt;/a&gt;&lt;br /&gt;
&lt;a href="#dataObject"&gt;dataObject&lt;/a&gt;&lt;br /&gt;
&lt;a href="#popup"&gt;popup&lt;/a&gt;&lt;br /&gt;
&lt;a href="#transmit"&gt;transmit&lt;/a&gt;&lt;br /&gt;
&lt;a href="#attr"&gt;src, href&lt;/a&gt;&lt;br /&gt;
&lt;a href="#disable"&gt;disable, enable&lt;/a&gt;&lt;br /&gt;
&lt;a href="#hash"&gt;hash, pathname&lt;/a&gt;&lt;br /&gt;
&lt;a href="#run"&gt;run&lt;/a&gt;&lt;br /&gt;
&lt;a href="#removeSpaces"&gt;removeSpaces&lt;/a&gt;&lt;br /&gt;
&lt;a href="#reverse"&gt;reverse&lt;/a&gt;&lt;br /&gt;
&lt;a href="#ending"&gt;ending&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;h2 id="makeActive"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/makeActive.js" target="_blank"&gt;makeActive&lt;/a&gt; (’classname’ || object{classname, selector})&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Часто возникает ситуация, когда нужно назначить класс таким образом, чтобы элемент был единственным его обладателем в ряду соседних элементов. Эту проблему помогает решить makeActive. По умолчанию назначается класс active. Нужный класс можно передать строкой :&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;$(this).makeActive('my_class_name');&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Или передать объект, заключающий в себе название класса и селектор соседних элементов:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;$(this).makeActive({
	className: 'my_class_name',
	selector: 'div'
});&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Пример:&lt;/p&gt;
&lt;iframe height="170" width="600" src="http://fiddle.jshell.net/codefucker/28DB8/1/show/light/" frameborder="0"&gt;&lt;/iframe&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;$('div').click(function(){
    $(this).makeActive();
});&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;h2 id="cycle"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/cycle.js" target="_blank"&gt;cycle&lt;/a&gt; (’next’ || ’prev’)&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Не знаю как вам, а мне иногда катастрофически не хватает циклических next / prev в jQuery. Эту проблему я решил, написав хелпер cycle, который принимает next или prev в качестве строки.&lt;/p&gt;
&lt;p&gt;Пример:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;$('#prev').click(function(){
    $('.wrap div.active').cycle('prev').makeActive();
});

$('#next').click(function(){
    $('.wrap div.active').cycle('next').makeActive();
});&lt;/code&gt;&lt;/pre&gt;&lt;iframe  height="200" width="600" src="http://fiddle.jshell.net/codefucker/28DB8/4/show/light/" frameborder="0"&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;h2 id="genHtml"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/gen.js" target="_blank"&gt;genHtml&lt;/a&gt; (code, count)&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Иногда бывает задача создать определённое количество html элементов, например для пагинации слайдера.&lt;/p&gt;
&lt;p&gt;Конструкции вроде:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;$('.slide').each(function(i){
	var $li = $('&amp;lt;li&amp;gt;').append('&amp;lt;a&amp;gt;&amp;lt;span&amp;gt;'+ (i+1) +'&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;');
	$pagination.append($li);
});&lt;/code&gt;&lt;/pre&gt;&lt;!-- или что хуже:
&lt;code&gt;$('ul').append('&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;');&lt;/code&gt;&gt; --&gt;&lt;p&gt;меня всегда бесили. Поэтому был написан хелпер genHtml, который принимает тег строкой и количество.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="insertCount"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/gen.js" target="_blank"&gt;appendCount, prependCount&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Вставляют нужное количество html элементов на страницу, используя genHtml. Синтаксис такой же как у genHtml.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="onlyDigits"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/onlyDigits.js" target="_blank"&gt;onlyDigits&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Иногда требуется текстовый инпут, в который физически можно ввести только цифры. К великому сожалению, стандартные средства html не предлагают такого функционала (даже &lt;mark&gt;&amp;lt;input type=&amp;quot;number&amp;quot; /&amp;gt;&lt;/mark&gt; в котором это было бы логично). Для этого существует хелпер onlyDigits.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;$('input').onlyDigits();&lt;/code&gt;&lt;/pre&gt;&lt;iframe height="87" src="http://fiddle.jshell.net/codefucker/28DB8/9/show/light/" frameborder="0"&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;h2 id="parseInt"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/parse.js" target="_blank"&gt;parseInt, parseFloat&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Вызываются у блока с числом или инпута и возвращают число сразу с типом number.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="breakdown"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/breakdown.js" target="_blank"&gt;breakdown&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;С помощью этого хелпера, можно разбить число пробелами по разрядам.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;$('#num').breakdown();&lt;/code&gt;&lt;/pre&gt;&lt;iframe height="92" src="http://fiddle.jshell.net/codefucker/28DB8/14/show/light/" frameborder="0" &gt;&lt;/iframe&gt;
&lt;p&gt;&lt;h2 id="cleaner"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/cleaner.js" target="_blank"&gt;cleaner&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;В современных приложениях реализована такая удобная, особенно на мобильных устройствах, штука, как крестик для очистки инпута от введённых в него данных. В браузеры, к сожалению, перекочёвывать она не сильно спешит. Насколько я знаю, такой крестик есть только в интернет экплорере, но последний не предоставляет возможностей для оформления этого элемента.&lt;/p&gt;
&lt;p&gt;Для этих целей был написан хелпер cleaner. Он добавляет рядом с инпутом &lt;mark&gt;&amp;lt;a class=&amp;quot;clean&amp;quot; /&amp;gt&lt;/mark&gt;, который можно оформить с помощью css как душе угодно.&lt;br /&gt;
Желательно перед использованием обернуть инпут в какой-нибудь див, а крестик прижать вправо абсолютным позиционированием. А после этого добавить инпуту паддинг справа, чтобы текст не заезжал на крестик. Да, к сожалению всё это не так удобно, как мне хотелось бы, но работаю над упрощением. Для стандартного использования написан &lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/cleaner.scss" target="_blank"&gt;css-код&lt;/a&gt;, который желательно просто копировать в основной файл стилей своего проекта и изменять.&lt;/p&gt;
&lt;iframe height="87" src="http://fiddle.jshell.net/codefucker/28DB8/13/show/light/" frameborder="0" style="margin-left: -5px;"&gt;&lt;/iframe&gt;
&lt;p&gt;&lt;h2 id="dataObject"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/dataObject.js" target="_blank"&gt;dataObject&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Данный хелпер позволяет доставать javascript-объекты из атрибутов data-*. Используется также, как и стандартный метод .data() в jQuery, только вместо строки возвращает объект.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="popup"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/popup.js" target="_blank"&gt;popup&lt;/a&gt; ([object{close, link}])&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Иногда нужен простой попап, который бы закрывался при клике за его пределами. Для этого был написан хелпер popup. При вызове он добавляет элементу класс shown, и удаляет при закрытии (я использую добавление класса, а не show/hide, чтобы управлять анимацией появления при помощи css). Метод может принимать объект, с атрибутами link и close. link — ссылка, при клике на которую будет показан попап. close — элемент внутри попапа (крестик), при клике на который попап будет закрыт.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="transmit"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/transmit.js" target="_blank"&gt;transmit&lt;/a&gt; (’method’, [options array])&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Все мы постоянно пишем колбеки для разных событий, и почти всегда используем анонимные функции для этого. Но конструкции вроде этой:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;$(window).load(function(){
	$('#object').click();
});&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;мне кажутся нелогичными и трудночитаемыми, когда намного логичней было бы так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;$(window).load($('#object').click);&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Но jQuery перезаписывает контекст у колбеков. И конечно в 99% случаев это удобно, но не в данном.&lt;br /&gt;
Хелпер transmit частично решает эту проблему, позволяя писать так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code&gt;$(window).load($('#object').transmit('click'));&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;h2 id="attr"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/attr.js" target="_blank"&gt;src, href&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Возвращают/изменяют значение атрибутов src и href у элементов на странице. Мне не хватало таких методов как val() у инпутов, только для ссылок.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="disable"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/disable.js" target="_blank"&gt;disable, enable&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;disable — добавляет атрибут &lt;mark&gt;disabled&lt;/mark&gt; у элементов, enable — убирает.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="hash"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/attr.js" target="_blank"&gt;hash, pathname&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Возвращают/изменяют соответствующие части href у ссылок на странице.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="run"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/run.js" target="_blank"&gt;run&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Запускает функцию в контексте текущей выборки, а не для каждого элемента отдельно, в отличии от &lt;a href="http://api.jquery.com/each/" target="_blank"&gt;each&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="removeSpaces"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/removeSpaces.js" target="_blank"&gt;removeSpaces&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Удаляет пробелы между элементами. Служит, в основном, для решения проблем с инлайн-блоками.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="reverse"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/reverse.js" target="_blank"&gt;reverse()&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Разворачивает порядок следования jQuery объектов.&lt;/p&gt;
&lt;p&gt;&lt;h2 id="ending"&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/helpers/ending.js" target="_blank"&gt;ending&lt;/a&gt; (end1, end2, end3, count)&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Хелпер для формирования окончаний у слов во множественном числе.&lt;/p&gt;
&lt;iframe height="87" src="http://fiddle.jshell.net/codefucker/28DB8/11/show/light/" frameborder="0" style="margin-left: -5px;"&gt;&lt;/iframe&gt;
&lt;p&gt;Для определения возможностей браузера я рекомендую использовать &lt;a href="http://modernizr.com/" target="_blank"&gt;Modernizr&lt;/a&gt;. Но в своей работе я сталкивался с тем, что не все нужные мне тесты были реализованы в нём. Поэтому я написал парочку своих, расширив jQuery.support, и оформив всё в файл jquery.support.js.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/support/calc.js" target="_blank"&gt;jQuery.support.calc&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Определяет, поддерживает  ли браузер css-функцию calc. Актуально для старых версий оперы и 8-го экслорера.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/support/flash.js" target="_blank"&gt;jQuery.support.flash&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Определяет, установлен ли Flash на компьютере пользователя.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/support/mobile.js" target="_blank"&gt;jQuery.support.mobile&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Детектит мобильные браузеры.&lt;/p&gt;
&lt;p&gt;&lt;h2&gt;&lt;a href="https://github.com/codefucker/jQueryHeplers/blob/master/src/support/preserve3d.js" target="_blank"&gt;jQuery.support.preserve3d&lt;/a&gt;&lt;/h2&gt;&lt;/p&gt;
&lt;p&gt;Проверяет, поддерживается ли браузером 3D представления. Актуально, если вы хотите использовать в своём проекте &lt;mark&gt;transform-style: preserve-3d;&lt;/mark&gt;.&lt;/p&gt;
&lt;p&gt;Хелперы собираются в один файл с помощью &lt;a href="http://gruntjs.com/" target="_blank"&gt;Гранта&lt;/a&gt;. Если проект получит развитие, в дальнейшем будет добавлена страница онлайн-сборки, где вы сможете собрать jQuery Helpers, выбрав только  необходимые вашему проекту хелперы.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt; Произошла какая-то фигня, и я не заметил, как публикнул недописанный черновик. Но это даже хорошо, т. к. я бы ещё месяц его мусолил. Так что кто увидел — тссс.&lt;/p&gt;
</description>
<pubDate>Thu, 07 Aug 2014 17:47:06 +0400</pubDate>
</item>


</channel>
</rss>