jQuery--большой функционал за короткое время

3.41K
.
The Frontend-Warrior
Z3RO (17.07.2011/16:44)
Работа с AJAX посредством jQuery
В jQuery есть три способа передачи данных без обновления страницы: $.ajax(), $.post(), $.get() и 1 способ получения данных: $.load()
Первый способ для передачи рассм
что то траблы с этим кодом как я понял, JQ должен загружать содержимое файлов в див container, однако у меня просто загружает ту страницу.
пример архив. пример html страницы
<!DOCTYPE html>
<html>
 <head>
  <title>jQuery примеры</title>
  <script src="jquery-1.6.2.min.js" type="text/javascript"></script>
  <script>
   $('div.links a').click(function (){
    var href = $(this).attr('href');
   $('#container').load(href);
    return false;
   });
  </script>
 </head>
 <body>
  <div class="links">
<a href="page1.php">Страница 1</a>
<a href="page3.php">Страница 2</a>
<a href="page2.php">Страница 3</a>
</div>
<div id="container"></div>
 </body>
</html>
Прикрепленные файлы:
.
The Frontend-Warrior
проверял в 3 браузерах: хром, опера, огнелис
.
Z3RO
Blade (18.07.2011/08:34)
что то траблы с этим кодом как я понял, JQ должен загружать содержимое файлов в див container, однако у меня просто загружает ту страницу.
пример архив. пример html страницы

Оперирующий скрипт нужно размещать в конце документа. =)
<!DOCTYPE html>
<html>
 <head>
  <title>jQuery примеры</title>
  <script src="jquery-1.6.2.min.js" type="text/javascript"></script>
 </head>
 <body>
  <div class="links">
<a href="page1.php">Страница 1</a>
<a href="page3.php">Страница 2</a>
<a href="page2.php">Страница 3</a>
</div>
<div id="container"></div>
<script>
   $('div.links a').click(function (){
    var href = $(this).attr('href');
   $('#container').load(href);
    return false;
   });
  </script>
 </body>
</html>
.
The Frontend-Warrior
Z3RO (18.07.2011/10:48)
Оперирующий скрипт нужно размещать в конце документа. =)
спасиб, фсе работает
.
Вот толькочто запилил еще один эфект. Панелька управления постом, которая появляется при наведении мыши на пост.
Тоесть по умолчанию ссылки удалить/редактировать и т.д. скрыты, а появляются лишь тогда, когда пользователь наводит курсор на пост.
HTML код выглядит так:
<div class="list1">
<div class="tpanel">
// Здесь находятся изображения-ссылки для управления постом, которые появятся при наведении мыши на пост
</div>
Текст поста
</div>


CSS код:

.tpanel{display: none; float: right; margin: 0 2px;}


Как видите по умолчанию панель управления скрыта (display: none;)

Ну и jQuery код:

$('div.tpanel').parent().hover(
function (){$(this).children('div.tpanel').fadeIn(300)},
function (){$(this).children('div.tpanel').fadeOut(200)}
);

parent() -- обращается к элементу-родителю
children() -- позволяет делать выборку только среди дочерних элементов
fadeIn(300) -- появление элемента путем изменения прозрачности за 300мс
fadeOut(200) -- скрытие элемента при отведении курсора от поста.
Результат можно увидет на скриншоте(курсор наведён на верхнюю новость).
Прикрепленные файлы:
.
Z3RO
И еще одна фишка: индикатор оставшейся разрешенной длинны в полях ввода.

Вот jQuery код:
$('input.maxLengthIndicator, textarea.maxLengthIndicator').after('<div></div>').next().hide().end().keypress(
function (e){
  var currentLength = $(this).val().length; // Принимаем текущую длинну значения
  maxLength = $(this).attr('maxlength'); // Принимаем максимальную длинну значения
  if(!maxLength)
    maxLength = 9999; // Если максимальная длинна не указана берем 9999
  reminderLength = maxLength - currentLength; // Вычисляем оставшуюся разрешенную длинну
  if(currentLength >= maxLength)
  {
    if(e.which != 0 && e.which != 8)
    {
        e.preventDefault(); // Если длинна значения >= максимальной длинне значения и нажатая клавиша не Delete(0) и не Backspace(8), то не вставляем последний введенный символ
    }
  }
  $(this).next().show().text('Осталось ' + reminderLength + ' символов.'); // Выводим колличество оставшихся символов
});


Теперь индикатор оставшихся символов будет вставлятся после каждого поля инпут и текстареа с классом maxLengthIndicator. Например:

<input type="text" class="maxLengthIndicator" maxlength="100"/>

Примечание: Обязательно указывайте аттрибут maxlength, поскольку из него и берется максимальная длинна текста(если не указать, то будет взято 9999)

Теперь проанализируем код:

Сначала мы находим все поля input и textarea с классом maxLengthIndicator, вставляем после них пустой элемент <div></div>, скрываем его и возвращаемся обратно к текстовому полю.

keypress() -- это событие, которое происходит после того, как была нажата и отпущена клавиша.

Описание функции приведено в коде выше. Результат можно увидеть на скриншоте.
Прикрепленные файлы:
.
После длительного перерыва у меня появился новый материал для этой темы. Итак, мы будем делать красивые подсказки. У самого дошли до такого руки как раз только сегодня.

Для начала нам нужно сделать стиль для наших новых подсказок:
.tooltip{
display: none;
background: #444;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
color: #fff;
font-size: 11px;
padding: 2px 6px;
position: absolute;
text-align: center;
min-width: 20px;
max-width: 200px;
}

.tooltip::after{
border-left: 5px solid transparent;
border-right: 5px solid transparent;
border-top: 5px solid #444;
content: '';
display: inline;
position: absolute;
left: 10px;
top: 100%;
}


Как вы видите это будут подсказки черного цвета с белым текстом шириной от 20 до 200 пикселов .tooltip::after создает черную стрелку внизу подсказки, направленную вниз(такой прием работает и в вап).

Теперь всё, что нам нужно это написать jQuery код, который будет при наведении курсора на элемент, имеющий атрибут title, удалять сам атрибут, а текст подсказки показывать в нашем блоке.

$(document).ready(function(){
  $('*[title]').hover(function(e){
    var title = $(this).attr('title');
    $(this).data('titleText', title).removeAttr('title');
    $('<p class="tooltip"></p>').html(title).appendTo('body').css('top', ($(this).offset().top - ($('p.tooltip').height() + 15)) + 'px').css('left', ($(this).offset().left + ($(this).width() / 2 - 16)) + 'px').fadeIn('medium');
  },
  function(){
    $(this).attr('title', $(this).data('titleText'));
    $('p.tooltip').remove();
  });
});


Небольшой разбор кода: сначала мы получаем текст подсказки(это может быть HTML текст и он будет корректно отображатся!!!), сохраняем его в хранилищи data элемента и удаляем атрибут title, после этого создаем элемент tooltip с текстом подсказки и задаем его координаты.
Вторая функция внутри hover() исполняется, когда курсор уводится с элемента, эта функция возвращает всё к первоначальному состоянию.
Вот и всё.

Дополнение:
$('p.tooltip').height() -- высота элемента подсказки(width() -- ширина)
$(this).offset().top -- козиция элемента с верху документа, над которым ведутся манипуляции(вместо top можно указать left, right и bottom)

Скриншот прилагается. Кто хочет "пощупать" это сам, то смотрим сайт в анкете, именно для него и писались эти подсказки.
Прикрепленные файлы:
.
Сейчас я сделаю небольшое отступление от темы, поскольку здесь jQuery фигурировать не будет.

Так уж случилось, что JavaScript не имеет возможности получения отдельных параметров Cookie, а выдает их(при помощи document.cockie) так, как они передаются в http заголовке.
Но как-то раз мне понадобилось получить значение определённой куки и результатом стал данный кусочек кода:

var cookiesArr = document.cookie.split('; ');
var cookies = new Array();
for(var i = 0; i < cookiesArr.length; i++)
{
  val = cookiesArr[i].split('=');
  cookies[val[0]] = val[1];
}


Сначала мы разделили всю строку document.cookie на пары имя=значение, а потом по циклу занесли их в массив cookies и теперь, чтобы получить значение куки с именем, например, name вы можете использовать данный код: cookies['name']
.
Подсказки в элементах формы.
Все наверное видели такие элементы формы, где уже есть какойто текст, который пропадает при передаче фокуса элементу, например, "Что у Вас нового?" Вконтакте. Так вот, это осуществляется при помощи атрибута placeholder

<input type="text" name="text" placeholder="Что у Вас нового?"/>


Но есть маленькая проблемка:
этот атрибут поддерживается только последними версиями браузеров, а разработчики IE вообще не слышали о таком атрибуте.
Так что же делать, если хочется рабочие кроссбраузерные подсказки? Выход прост: JavaScript, а в данном случае библиотека jQuery.

Собственно сам код:

$(document).ready(function(){
  $('input[placeholder], textarea[placeholder]').each(function(){
    if(!$(this).val().length)
        $(this).val($(this).attr('placeholder'));
    $(this).data('default', $(this).attr('placeholder')).removeAttr('placeholder')
    .focus(function(){
        if($(this).val() == $(this).data('default') || '')
            $(this).val('');
    }).blur(function(){
        if($(this).val() == '')
            $(this).val($(this).data('default'));
    });
  });
});


Сначала мы выполняем обход всех элементов имеющих атрибут placeholder, берем из него текст и вставляем как текст данного элемента формы. При передаче фокуса элементу, текст будет удален, а при уборе фокуса если текст не был введен в поле, то подсказка вернётся назад. Вот и всё.
.
на 322 это всё можно тестить?пойдет?
Всего: 136