Слайд 1 - BioRainbow

advertisement
JavaScript: jQuery
Валеев Т. Ф.
jQuery: введение
• jQuery — Библиотека, фокусирующаяся на взаимодействии JavaScript
и DOM
http://jquery.com/
• Активно разрабатывается и получает всё больше популярности.
• Имеется большое количество плагинов.
• Первая версия: январь 2006, текущая стабильная — май 2014
(ver.1.11.1/2.1.1, ~30Kb в сжатом виде+GZip), лицензия GPL и MIT
• Ветка 2.x — то же самое, но без поддержки старых браузеров
• Автор: Джон Резиг (John Resig), работал в Mozilla
• Вся функциональность в объекте jQuery, который создаётся через $()
• Также есть класс для Ajax-запроса и несколько вспомогательных
функций.
• Подключение:
https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js
http://code.jquery.com/jquery-1.11.1.min.js
jQuery: введение
•
•
•
•
•
•
•
Основной объект jQuery — коллекция DOM-элементов.
jQuery-объект создаётся с помощью селекторов, HTML-кода, DOM-элемента,
массива DOM-элементов.
Действие, совершаемое с коллекцией, применяется, как правило, ко всем её
элементам (кроме операций чтения состояния, которые применяются к
первому элементу).
Для явного доступа к функциям DOM Element надо воспользоваться методом
get() (вернёт массив DOM-элементов) или get(index) — один DOM-элемент.
Весь доступ через методы. Например:
$(‘#box’).css(‘color’, ‘red’)
Если объект представляет набор DOM-элементов, изменения коснутся
каждого.
Для совместного использования jQuery и других библиотек, использующих $
(prototype.js) в jQuery предусмотрен метод jQuery.noConflict().
$(function() {…}) — вызвать функцию после загрузки DOM-модели документа.
jQuery: селекторы (~CSS 1.3)
•
•
•
•
•
•
•
•
•
* — все элементы
h1, .class, #id — по тэгу, классу и id
“h1 h2”, “h1 > h2”, “h1 ~ h2”, “h1 + h2” — потомок, непосредственный потомок,
собрат, непосредственный собрат
[name], [name=“value”], [name!=“value”], , [name^=“start”], [name$=“end”],
[name*=“substring”], [name|=“startToDash”], [name~=“word”] — фильтры по
атрибуту.
:button, :checkbox, :file, :image, :input, :password, :radio, :reset, :submit, :text,
:header – сахар (= “button, [type=button]” и т. д.)
:checked, :disabled, :enabled, :focus, :hidden, :visible, :selected, :animated —
состояние элемента
:empty, :parent, :only-child, :even, :odd, :first, :last, :first-child, :last-child, :only-oftype, :last-of-type, :first-of-type, :eq, :lt, :gt, :nth-child(1/even/odd/4n+1) и т. д.
:contains(Text), :not(selector), :has(selector) – условия
Имейте в виду: document/element.querySelectorAll()
jQuery: создание объекта
• Селектор ( => jqbasic.html )
• Селектор с контекстом $(‘div’, ajax.responseXML)
• Создание DOM-элементов на лету из HTML:
$(‘<div><p>Hello!</p></div>’) (пока в документ не вставлен!)
• Конструирование из DOM-элемента:
$(document.getElementById(“id”))
• Конструирование из массива DOM-элементов:
$(document.getElementsByName(“name”))
Манипулирование элементами
• Простые операции: each(function), size(), eq(num), filter(selector),
get([num]), index(element), slice(start[, end]), add(content)
• Ассоциировать данные с элементом:
data(name,value), data(name), removeData(name)
• Доступ к аттрибутам:
attr(key[, value]), attr(key,function), attr({attrhash}), removeAttr(key),
css(name[, value]), css({csshash}), val([value]), addClass(className),
removeClass(className), toggleClass(className), hasClass(className)
• Содержимое: html([newhtml]), text([newtext])
• Координаты и размеры: offset(), offsetParent(), position(),
scrollTop([val]), scrollLeft([val]), height([val]), width([val]), innerWidth,
innerHeight, outerWidth, outerHeight и т. д.
Манипуляция деревом DOM
• Добавление новых элементов: append(content),
prepend(content), after(content), before(content) ( content =
String, Element, jQuery )
• Добавление текущего элемента: appendTo(selector),
prependTo(selector), insertAfter(selector),
insertBefore(selector)
• Обернуть: wrap(content) “<div></div>”, wrapAll(),
wrapInner()
• Заменить: replaceWith(content), replaceAll(selector)
• Удалить из дерева: remove(), empty()
• Копировать: clone()
Обход дерева
• Любой метод выполняется для каждого элемента из набора и
возвращает набор уникальных элементов
• На текущем уровне:
next([selector]), prev([selector]), nextAll([selector]), prevAll([selector]),
siblings([selector])
• Вверх по дереву: parent([selector]), parents([selector]), closest(selector)
• Вниз по дереву: children([selector]), find(selector), contents()
• Модификация списка элементов: add([selector/elements/html]),
addBack(), first(), last(), not([selector]), filter([selector]), has([selector]),
eq(n), slice(from, to), end():
$('ul.first').find('.foo').css('background-color', 'red')
.end().find('.bar').css('background-color', 'green');
События
• Можно регистрировать много для одного объекта
• От устройств: click, dblclick, mousedown, mouseup, mousemove,
mouseenter, mouseleave, mouseover, mouseout, keydown, keyup,
keypress
• Логические: focus, blur, select, scroll, submit, change, resize, load, unload
• on(“eventName[.namespace]”, fn) (off) — ассоциировать произвольное
событие с элементом (можно создавать и свои!)
• trigger(eventName) — сгенерировать событие
• on(“eventName[.namespace]”, selector, fn) — «живое» событие, будет
добавляться для всех элементов селектора
• off(“[eventName][.namespace]”[, selector]) – убрать живое событие ( =>
live.html )
• toggle(f1, f2, …) — вызывать при кликах поочерёдно разные функции
• hover(fover, fout) — shortcut для mouseover/mouseout
События
• Пришедшее событие (например, click на элементе) поступает на
обработчики самого внутреннего элемента, а затем по очереди
передаётся вышестоящим (event bubbling), после чего выполняется
действие по умолчанию, определяемое браузером (например, для
dblclick — выделение слова).
• Чтобы запретить действие по умолчанию, в обработчике события
надо вызвать event.preventDefault()
• Чтобы запретить bubbling, надо вызвать event.stopPropagation()
• Чтобы запретить и bubbling, и обработку события другими
обработчиками текущего элемента, надо вызвать
event.stopImmediatePropagation()
• Будьте аккуратнее с событиями, так как количество обработчиков
может непредсказуемо расти, а также возможно зацикливание.
Эффекты
• Эффекты могут длиться некоторое время. Их можно
объединять в цепочку, формируя очередь
• Показать/скрыть show([speed]), hide([speed]),
toggle([speed]), fadeIn(speed), fadeOut(speed)
• Свернуть: slideUp(speed), slideDown(speed)
• CSS-анимация: animate({csshash}, speed)
csshash:
{width: “70%”, top: “+=100px”, left: “-=50px”}
• stop() — остановить выполнение эффектов (или всех, или
текущего)
=> jqanimate.html
Другие полезные библиотеки
•
•
•
•
•
•
•
•
jQueryUI — элементы пользовательского интерфейса на базе jQuery
http://jqueryui.com/
Bootstrap.js — ещё UI-компоненты
http://getbootstrap.com/javascript/
Ext JS (Project Sencha) — платформа для веб-разработки
http://www.sencha.com/products/extjs/
Dojo toolkit — UI-компоненты, графики
http://dojotoolkit.org/
MooTools — альтернатива jQuery
http://mootools.net/
AngularJS — MVW framework
https://angularjs.org/
ReactJS / JSX — компонентный подход к интерфейсам
http://facebook.github.io/react/
RequireJS — менеджер зависимостей
http://requirejs.org/
Download