Илья Воронцов
Задачи jQuery
$(function(){ ... });
— запускает код, когда документ готов.$(selector)
— поиск элементов по CSS-селектору. Они будут доступны как jQuery-объект с коллекцией элементов$(element)
— обернуть элемент в jQuery-объект$(htmlCode)
— создать HTML-элемент$(function(){ ... });
Запускает код, когда документ готов (безопасно манипулировать DOM).
Это сработает быстрее, чем document.onload (не дожидается загрузки картинок).
И надёжнее, чем обработка события DOMContentLoaded — это сработает, даже если событие случилось до того как обработчик был задан.
$(selector)
Поиск элементов по (расширенному) CSS-селектору. Выборка будет доступна как jQuery-объект с коллекцией элементов
Этой коллекцией можно манипулировать как единым целым
Пример:
$('.message > span.time') // найти элементы по селектору
.css('font-size', '0.8em') // каждому элементу добавить стиль
.css('color', 'gray'); // и ещё один
$('.message') // найти сообщения
.find('.user') // внутри сообщений найти имена пользователей
.hide(); // скрыть их все
Большинство методов можно стыковать друг с другом в длинные цепочки.
Это работает, потому что методы работают с jQuery-коллекцией (selection) и возвращают тоже jQuery-коллекцию. Например:
selection.css(key, value) -> selection
Чтобы это работало функции выглядят примерно так:
function(...) {
this.set(...) // что-нибудь поменять в объекте
return this; // но вернуть его же
}
Многие методы имеют две формы вызова:
selection.attr(key)
— прочитать значение атрибутаselection.attr(key, value)
— записать значение атрибутаЧтобы это работало функции выглядят примерно так:
function(key, value) { // функция принимает два аргумента
if (value === undefined) { // если второй из них не задан
return this.get(key); // используем её как геттер
// и возвращаем результат
}
this.set(key, value); // в противном случае что-то меняем
return this; // и возвращаем сам объект, чтобы с ним работать и дальше
}
Если геттер применён к коллекции элементов, обычно он возвращает значение, соответствующее первому из них
$(element)
— обернуть элемент в jQuery-объектИногда мы получаем обычный HTMLElement в качестве объекта, но хотим вызвать с ним jQuery-метод.
Тогда его надо обернуть в объект
$('button').on('click', function(event) { // каждой кнопке добавить обработчик кликов
$(this) // this — HTMLElement кнопки. $(this) — его jQuery-версия
.prop('disabled', true); // сделаем нажатую кнопку выключенной
})
$(htmlCode)
— создать HTML-элементБывает удобно из кода создать такой элемент и что-то с ним сделать специфичное для jQuery
$( "My new text
" ).appendTo( "body" );
Все методы jQuery-коллекций хранятся в $.fn
. Там вы можете расширять код.
$.fn.rainbow = function() {
const colors = ['red', 'orange', 'yellow', 'green', 'blue', 'violet'];
this.css('color', () => colors[Math.floor(Math.random() * colors.length)]);
return this;
};
$('strong').rainbow();
$( "ul.first" )
.find( ".foo" )
.css( "background-color", "red" )
.end()
.find( ".bar" )
.css( "background-color", "green" );
selection.on(eventTypes, handler)
selection.off(eventTypes [, handler])
selection.one(eventTypes, handler])
selection.on(eventTypes [, childSelector] [, data], handler)
selection.trigger(event)
— вызвать событие: trigger('focus'), trigger('click'), etc
let div = $( "div" );
function runIt() {
div
.show( "slow" )
.animate({ opacity: "0.5" }, 2000 )
.animate({ left: "+=200" }, 2000 )
.slideToggle( 1000 )
.slideToggle( 1000 )
.animate({ left: "-=200" }, 1500 )
.queue(function() {
alert( "Animation almost complete." );
$( this ).dequeue();
}
.hide( 1200 )
.slideUp( "normal", runIt );
}
function showIt() {
let n = div.queue( "fx" );
$( "span" ).text( n.length );
setTimeout( showIt, 100 );
}
runIt();
showIt();