Пятничные сниппеты. jQuery, часть вторая

4 июля 2008, 18:24 Евгений Белодед JavaScript рейтинг +21-

Пятничные сниппеты jQueryСегодняшние сниппеты опять про jQuery. Так же не проходите мимо прошлой статьи про jQuery.







 

Расположение объекта по центру экрана

jQuery.fn.center = function() 
{
var w = $(window);
this.css("position","absolute");
this.css("top",(w.height()-this.height())/2+w.scrollTop() + "px");
this.css("left",(w.width()-this.width())/2+w.scrollLeft() + "px");
return this;
}

Замена текста внутри элемента, используя регулярные выражения

Полезно, например при замене «скрыть» - «показать»

jQuery.fn.toggleText = function(a,b) 
{
return this.html(this.html().replace(new RegExp("("+a+"|"+b+")"),
function(x){return(x==a)?b:a;}));
}

Запуск события resize после задержки

Задержка нужна по той причине, что событие resize() постоянно, пока юзер изменяет размер окна. А с использование этой функции, ресайз будет запускаться только через некоторое количество мс после того, как юзер прекратит изменять размер экрана.

jQuery.fn.resizeComplete = function(fn, ms) 
{
var timer = null;
this.resize(function()
{
if (timer)
{
clearTimeout(timer);
}
timer = setTimeout(fn,ms);
});
}

Создание селекторая :contains, чувствительного к регистру

jQuery.extend(jQuery.expr[':'], {
containsIgnoreCase: "(a.textContent||a.innerText||jQuery(a).text()||'').toLowerCase().indexOf((m[3]||'').toLowerCase())>=0"
});

Имитация таймаута

$('a').click(function()
{
$(this).animate({width:$(this).width()},5000,
function()
{
// Эта функция запустится только через 5 секунд
alert('Ссылка была нажата 5 секунд назад');
})
});

В комментариях можете задавать любые вопросы, касающиеся jQuery. А мы будем на них отвечать.

Рекламное место, которое может стать вашим

Понравилась статья?

Тогда подпишись на обновления через RSS или воспользуйся
другими способами подписки.

Читать в Яндекс.Ленте Добавить в Google Добавить в Netvibes
  •  

Комментарии — 17

RSS
  • Аватарка
    5 июля 2008 в 18:59 Zena - королева воинов
    Да, пятничные сниппеты - это вам не субботние сиськи.©
  • Аватарка
    5 июля 2008 в 19:20 iRobo
    как на jQuery сымитировать таймаут? То есть как сделать, чтобы функция запустилась через некоторе количество секунд после нажатия на сцылку?
  • Аватарка
    5 июля 2008 в 19:41 ]]>Жека]]>
    Можно использовать функцию animate, при этом ничего не выполняя (я добавил в обзор функцию, которая ничего не делает с шириной и через пять секунд показывает алерт). Хотя это, безусловно, неразумное решение. В js для этого есть SetTimeout.
  • Аватарка
    18 июля 2008 в 23:30 ]]>Q-Zma]]>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Some title</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        /*<![CDATA[*/
        (function ($) {
          $(function () {
            $('#elm').bind('click', function (e) {
              e.preventDefault();
              var $this = $(this);
              var timoutHandler = function () { 
                window.alert('timeout handler, clicked elm id="' + $this.attr('id') + '"'); 
              };
              window.setTimeout(timoutHandler, 1500);
            });
          });
        })(jQuery);
        /*]]>*/
        </script>
      </head>
      <body>
        <a href="javascript:void(0)" id="elm">Click me</a>
      </body>
    </html>
  • Аватарка
    19 июля 2008 в 1:39 ]]>Жека]]>
    Вопрос к педантичному отморозку: И чё?
  • Аватарка
    23 июля 2008 в 8:29 ]]>Shimon]]>
    scrollTop() и scrollLeft() должны быть без скобочек - это не функции. К сожалению не сработал первый сниппет, но для себя я в свое время нашел такое решение (см. Some CSS):
    jQuery.fn.center = function() {
    	this.css("top",		document.documentElement.scrollTop + "px");
    	this.css("left",	document.documentElement.scrollLeft   "px");
    	this.css("width",	document.documentElement.clientWidth   "px");
    	this.css("height",	document.documentElement.clientHeight   "px");
    	return this;
    }
    Ну и дополнительно к этому коду я добавил обработчик изменения размера окна, немного упрощенный вариант:
    $(window).bind('resize', function() {
    	$('#modal').center();
    });
  • Аватарка
    23 июля 2008 в 8:35 ]]>Shimon]]>
    Забыл добавить, что если после center() к элементу применяются другие функции, изменяющие его вид/состояние (как например fadeIn()) то значения размеров и положения могут (а может и всегда так) вернуться к прописанным ранее в CSS, т.е. при определенных условиях стили переданные через jQuery не применяются :( Короче если делаешь center() то не стоит указывать соответствующие свойства в CSS. Надеюсь я донес свою мысль вполне ясно.
  • Аватарка
    16 октября 2008 в 19:20 bodro
    хорошая подборка, а еще есть?) вот пример паузы: function ___pause(ms) { var date = new Date(); curDate = null; do { var curDate = new Date(); } while ( curDate - date < ms); };
  • Аватарка
    26 июня 2009 в 18:24 ]]>Nalivaeff]]>
    А можно живой готовый пример ко второму сниппету? А то что-то не получается ничего, а очень нужно
  • Аватарка
    26 июня 2009 в 18:43 ]]>Евгений]]>
  • Аватарка
    22 декабря 2009 в 12:09 ]]>seo]]>
    Хорошие примеры ,
    а есть примеры по замене текста внутри ссылки ?
  • Аватарка
    13 апреля в 14:46 ]]>Arahat]]>
    seo: да нет ничего проще. Просто $('a:last').html('чем заменить текст в ссылке'); после выполнения текст последней ссылки будет заменен на указанный. а если указать $('#mylinkid').html('новый текст') то именно у ссылки с айди mylinkid будет заменен текст.
  • Аватарка
    6 июня в 23:46 BrusLi
    Здравствуйте!
    Раз можно любые вопросы о jQuery...
    Как можно сортировать строки в таблице? Типа: по дате, по имени и тд.
    Спасибо.
  • Аватарка
    6 июня в 23:49 ]]>Evgenij]]>
    Брюсли,
    специально для этой цели есть хороший плагин TableSorter.
    Надеюсь документация будет понятна, если нет - мы можем расширить этот вопрос на статью.

    А вообще, для вопросов у нас спецовый раздел.
  • Аватарка
    7 июня в 12:19 BrusLi
    Спасибо за ответ!
    TableSorter уже нашёл, и есть ещё frequency decoder.
    Но хочется хоть маленько понимать, что происходит. Пока, для меня код jQuery - фарш...
    Нашёл ешё такую инфу, думаю начать копать оттуда.
    Статья это хорошо, если вам интересно, а то для моей скромной персоны - черезчур :).
    Спасибо.
  • Аватарка
    23 июня в 17:31 ]]>полиграфия]]>
    У меня такой вопрос - как можно из одной формы послать запрос сразу на два сервера ?
  • Аватарка
    23 июня в 19:19 ]]>Николаев]]>
    Ну как обычно.
    по клику на баттон
    params = $(this).parents("form").serialize();
    $.ajax({url: 'index.php',
    			type: 'POST',
    			data: params
    		});
    
    $.ajax({url: 'log.php',
    			type: 'POST',
    			data: params
    		});
    

    и все. форма сабмитнулась на два урла. И даже страница не перезагрузилась. :)
    А если с перезаугрзкой то
    params = $(this).parents("form").serialize();
    $.ajax({url: 'log.php',
    			type: 'POST',
    			data: params,
    success: function(html){
    document.forms.formname.submit();}
    		});
    

    тоесть аяксом сабмитишь форму на лог пхп а потом по саксесу аякса сабмитишь форму. У формы имя formname ну и экшн на index.php
    ps одинарные кавычки забекслешились... ну это не я.
  • Эл. почта (используется для Граватарки)
  • Домашняя страница
  • Имя в Твиттере
  • Разрешенные теги Текст сообщения (надо бы заполнить это поле)
  • как выглядит какой тег
    жирный текст <b>жирный текст</b>
    курсивный тект <i>курсивный тект</i>
    зачеркнутый текст <s>зачеркнутый текст</s>
    подчеркнутый текст <u>подчеркнутый текст</u>
    ссылка <a href="адрес">ссылка</a>
    function foo() { ... }
    <pre><code>function foo() { ... } </code></pre>