Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2

.pdf
Скачиваний:
8
Добавлен:
08.02.2015
Размер:
2.57 Mб
Скачать

2.3. Манипулирование

обернутым набором элементов

93

 

 

Метод

Описание

 

 

 

 

 

 

 

 

 

 

 

 

parent([selector])

Возвращает

обернутый

набор , куда включаютсяуни

 

 

кальные прямые предки всех элементобернутомвв

 

 

наборе .

 

 

 

 

 

 

parents([selector])

Возвращает обернутый набор , содержащий уникаль-

 

 

ные родительские

элементы всех обернутых элемен-

 

 

тов . Вих число входят прямые предкитакже,

все

 

 

остальные

родительские

элементы , за исключением

 

 

корневого

элемента

документа .

 

 

parentsUntil([selector]) Возвращает обернутый набор , содержащий -все ро дительские элементы всех обернутых элементов , вплоть до элемента ( но не включая его ), соответствующего селектору . Если совпаденийселектором не будет обнаружено или если селектор опущен , -отбира ются все родительские элементы .

prev([selector])

Возвращает

обернутый

набор , состоящий изуни

 

кальных

соседних

элементов , предшествующих

 

в дереве

DOM элементам

первоначального

обернутого

 

набора .

 

 

 

 

 

 

 

prevAll([selector])

Возвращает

обернутый

набор , содержащий - все со

 

седние элементы , предшествующиедереве DOM

 

элементам

первоначального

обернутого

набора .

prevUntil([selector])

Возвращает

обернутый

набор , содержащий всесосед

 

ние элементы , предшествующиедереве DOM эле-

 

ментам

первоначального

обернутого

набора , вплоть

 

до элемента

( но не включая

его ), соответствующего

 

селектору . Если совпаденийселектором

не будет -об

 

наружено или если селектор

опущен , отбираются все

 

предшествующие

соседние

элементы .

 

siblings([selector]) Возвращает обернутый набор , содержащийуни кальные соседние элементы , находящиеся на одном уровне вложенности элементамис первоначального обернутого набора .

Рассмотрим ситуацию , когдарезультатев

щелчка мышью по кнопке

 

вызывается

обработчик

этого

события

( подробнее

об обработчиках-

со

бытий рассказывается главе 4),

которому передается элемент<button>

 

в виде ссылкиthis. Далее

предположим

, что внутри

обработчика нам

 

требуется

отыскать блок<div>, в котором

определена

эта кнопка .-Сде

 

лать это можно помощьюс

методаclosest():

 

 

 

$(this).closest(‘div’)

Но эта инструкция отыщет только самый ближайший родительский элемент <div>; а как быть , если искомый элемент<div> находится выше

в дереве DOM? Это не проблема . Мы можем усовершенствовать - селек

94

Глава 2. Выбор элементов для дальнейшей работы

 

 

 

тор , который передается методуclosest(), чтобы точнее обозначить - ис комый элемент :

$(this).closest(‘div.myButtonContainer’)

Теперь будет отобран родительский

элемент<div> с классом myButtonCon-

 

 

tainer.

 

 

 

 

 

 

 

Остальные

методы , перечисленныетаблв . 2.5, действуют

похожим-

об

 

разом . Возьмем , например , ситуацию , когда

необходимо отыскать-

со

седнюю кнопку определеннымс

значение атрибутаtitle:

 

 

 

$(this).siblings(‘button[title=”Close”]’)

 

 

 

 

 

Эти методы

обеспечивают большую

широту

выбора

элементов

из дерева

DOM на основе их взаимоотношений другимис

элементами . Ноэтои

 

 

еще не все . Давайте посмотрим

, что еще jQuery может делатьоберну-с

 

 

тыми наборами .

 

 

 

 

 

 

2.3.5. Дополнительные

способы

использования

 

 

 

 

обернутого набора

 

 

 

 

 

 

 

 

 

 

 

 

 

Всего вышесказанного , пожалуй

, достаточно

, тем не менеерукаве

 

у jQuery

есть еще несколько

приемов , позволяющих

определять-

кол

лекции

обернутых

объектов .

 

 

 

 

 

 

 

 

 

 

 

Метод find() служит

для поиска

средипотомков элементов

, входящих

 

в обернутый

набор , возвращая

новый

набор , который

содержит-

все эле

менты , соответствующие

заданному

селектору

. Допустим

, обернутый

набор хранится переменнойв wrappedSet, тогда

спомощью

следующей

 

инструкции

мы сможем

получить

другой

обернутый

набор

всех цитат

(элемент <cite>) из абзацев , которые

являются

дочерними элементами

по отношению элементамк

обернутого

набора :

 

 

 

 

 

 

 

 

wrappedSet.find(‘p cite’)

 

 

 

 

 

 

 

 

 

 

 

 

 

Как имногие другие методы jQuery для работыобернутымис

набора-

 

ми , метод find() обретает

дополнительную

мощь

при использовании

внутри

цепочки

операций .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Синтаксис

метода find

 

 

 

 

 

 

 

 

find(selector)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Возвращает

новый

обернутый

набор , содержащий

все элементы-

, дочер

 

ние по отношению элементамк

из первоначального

 

набора , соответству-

 

 

ющие

заданному

селектору .

 

 

 

 

 

 

 

 

 

 

 

 

Параметры

selector (строка ) Селектор jQuery, которому должны соответствовать элементы возвращаемом наборе .

2.3. Манипулирование

обернутым

набором

элементов

95

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Возвращаемое

значение

 

 

 

 

 

 

 

 

 

 

 

Вновь

созданный обернутый

набор

элементов .

 

 

 

 

 

 

 

 

 

 

Этот метод

чрезвычайно

удобно использовать , серединекогдав цепочки

 

методов

jQuery

необходимо

выполнить

поиск

дочерних элементов

, где

невозможно

изменить контекст

или как -то иначе ограничить выборку .

Последним

этомв разделе

мы исследуем

один из методов , позволяющих

проверять

обернутый

набор

на наличие , по крайней мере , одного-

эле

мента , соответствующего

заданному

селектору . Методis() возвраща-

 

ет значение true, если

селектору

соответствует

хотя бы один элемент ,

и false – в противном

случае . Например

:

 

 

 

 

 

var hasImage = $(‘*’).is(‘img’);

 

 

 

 

 

 

 

 

 

Эта инструкция

установит

значение

переменнойhasImage равным true,

 

если втекущей

странице

присутствует

 

хотя бы один элемент<img>.

 

Синтаксис метода is

is(selector)

Определяет , имеются лиобернутомв наборе элементы , соответствующие заданному селектору .

Параметры

 

 

selector (строка ) Селектор , проверяющий наличие искомых

элементов

в обернутом

наборе .

 

Возвращаемое значение

 

true – если заданному

селектору соответствует хотя бы один

элемент ,

и false – в противном

случае .

 

Это чрезвычайно оптимизированная быстраяи операция , благодаря чему она может использоваться ситуацияхв , когда требуется высокая производительность .

2.3.6. Управление

цепочкамиметодов

jQuery

 

 

 

Мы проделали

грандиозную

работу по изучению

возможности

методов

jQuery

для работы

собернутыми

наборами

объединятьсяцепочкив

,

чтобы

выполнить

больше операцийоднойв инструкции

( и продолжим

двигаться

втом же направлении

, потому чтодействительноэто

гран-

 

диозная работа ). Способность

 

формировать

цепочки

не только - позволя

ет кратко

записывать мощные

операции ,повышаетно и

их эффектив-

ность , потому

что благодаря

такой возможности

ликвидируется-

необ

96

 

 

 

 

 

 

Глава

2. Выбор элементов

для дальнейшей

работы

 

 

 

 

 

 

 

 

 

 

ходимость

снова сноваи

извлекать

один тоти

же набор

элементов

для

 

 

применения

немук

нескольких

методов .

 

 

 

 

 

 

 

 

 

 

 

 

Внутри

цепочки , зависимости

от методов , из которых

она сконстру-

 

ирована , может быть сгенерировано

несколько

обернутых

наборов .

Например

, при использовании

методаclone() ( который

мы подробнее

 

 

рассмотрим

главе 3) генерируется

новый

обернутый

набор , представ-

 

ляющий

собой

точную

копию

первого

набора . Но еслинасбыне убыло

 

 

никакой

возможности

 

сослаться

на первоначальный

 

набор после-

соз

дания копии , наши возможности

по конструированию

гибких

цепочек

методов

jQuery

были

бы весьма

ограничены .

 

 

 

 

 

 

 

 

 

 

Рассмотрим

следующую

инструкцию :

 

 

 

 

 

 

 

 

 

 

 

 

 

$(‘img’).filter(‘[title]’).hide();

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Внутри

этой инструкции

создается

два обернутых

набора : первона-

 

чальный

набор

всех элементов<img> на странице

ивторой , состоящий

 

 

только

из элементов

оригинального

обернутого набора , имеющих-

атри

бут title. ( Конечно , то же самое можно

было бы сделатьпомощьюс

се-

 

 

лектора , но мы привели этот пример

для демонстрации имеющейся-

воз

можности

. Представьте

, чтоцепочкев

нам потребуется

 

сделать

нечто

 

очень важное , прежде

чем вызвать методfilter().)

 

 

 

 

 

 

 

 

 

 

 

Но как быть , если впоследствии

нам потребуется

применить

метод-

, на

пример , добавляющий

имя классапервоначальномук

 

обернутому -

на

 

 

бору ужепосле того , как он был отфильтрован

? Мы не можем

добавить

новый метод конецв цепочки , потому

что он будет

воздействовать-

толь

ко на элементы

-изображения

 

, имеющие

атрибутtitle, а не на первона-

 

 

 

чальный

набор

изображений .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Для решения

этой проблемы

 

jQuery

предоставляет

методend(). При

 

 

 

использовании

внутри

цепочки

методов

jQuery

он выполняет

откат

к предыдущему

обернутому

наборувозвращаети

 

его , благодаря

чему

 

 

все последующие

операции

будут применятьсяпредыдущемук

набору .

 

 

Например

:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$(‘img’).filter(‘[title]’).hide().end().addClass(‘anImage’);

 

 

 

 

 

 

 

 

 

Метод filter() возвращает

отфильтрованный

набор элементов

-изобра-

 

жений , но после вызова

методаend() мы получаем

предыдущий

оберну-

 

 

тый набор ( оригинальных

изображений

), на который

затем

воздейству-

ет метод addClass(). Без методаend() метод addClass() воздействовал

бы

 

 

на отфильтрованный

набор .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Проще

всего

представлять

себе этот механизм

как стеккоторый, в

по-

 

 

падают обернутые наборы , производимые

методами

jQueryцепочкев .

 

 

При вызове методаend() самый

верхний

( то есть самый

последний-

) обер

нутый

набор

выталкивается

 

из стека , открывая

последующим

методам

доступ

кпредыдущему

 

набору .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.3. Манипулирование

обернутым

набором

элементов

97

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Синтаксис

метода

end

 

 

 

 

 

end()

 

 

 

 

 

 

 

 

 

Используется

вцепочках

методов

jQuery

для отката предыдущемук

 

 

 

обернутому

набору элементов .

 

 

 

 

 

 

 

Параметры

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

Возвращаемое

значение

 

 

 

 

 

 

 

 

Предыдущий

обернутый

набор .

 

 

 

 

 

 

 

 

 

 

 

Другой удобный метод jQuery, который изменяет

« стек » обернутых-

на

боров , называетсяandSelf(). Этот метод объединяет

два самых верхних

 

в стеке набора единыйв обернутый

набор .

 

 

 

 

Синтаксис методаandSelf

andSelf()

Объединяет два предыдущих обернутых наборацепочкахв методов.

Параметры

нет

Возвращаемое значение

Объединенный обернутый набор .

Например , инструкция :

$(‘div’)

.addClass(‘a’)

.find(‘img’)

.addClass(‘b’)

.andSelf()

.addClass(‘c’);

отберет

все элементы<div>, применит нимк классa, создаст

новый

обер-

нутый

набор , содержащий

все элементы<img>, вложенные

вотобран-

ные ранее элементы<div>, добавит

кним классb, создаст третий

обер-

нутый

набор , объединяющий себев

элементы<div> и вложенные

нихв

элементы <img>, и применит

кним классc.

 

 

Уф -ф ! Вконечном итоге все элементы<div> получат классыa и c, а вложенные вних элементы<img> – классы b и c.

98

Глава 2. Выбор элементов для дальнейшей работы

 

 

 

Как видите , библиотека jQuery предоставляет широкий набор средств управления обернутыми наборами , позволяющий выполнять - практи чески любые операции над ними .

2.4. Итоги

В этой главе

все внимание

было

сконцентрировано

 

на созданииуточ-

и

нении наборов элементов этой( в иследующих

главах

называемыхобер-

 

нутыми наборами) с помощью

множества

методов , которые библиоте-

ка jQuery

предоставляет

для идентификации

элементов

на странице

HTML.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Библиотека

jQuery

обеспечивает

 

множество

гибкихмощныхи селекто-

 

ров с кратким игибким синтаксисом , напоминающим

селекторы

CSS,

для идентификации

элементов

внутри

страницы

документаих число. В

 

входят синтаксические

конструкции

CSS3,настоящеев

время

поддер-

 

живаемые

большинством

 

современных

броузеров .

 

 

 

 

Библиотека

jQuery

также

позволяет

создаватьрасширять

оберну-

 

тые наборы , создавая на лету новые

элементыпомощьюс

фрагментов

 

HTMLразметки . Этими

ничемук не привязанными

элементами

-мож

но манипулировать

, как любыми

другими

элементамиобернутомв

на-

 

боре , вконечном

счете присоединяя

ихтемк или иным

частям доку-

 

мента страницы .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Библиотека

jQuery

предоставляет

ряд надежных

методов

для усечения

обернутого

набора , как сразу после

его создания в, такходеивыполне-

 

ния цепочки

методов . Применение

фильтрующих

критериевуже имек-

 

ющемуся

набору

позволяет

 

легко

создавать

новые

обернутые

наборы .

В общем ицелом

jQuery

предоставляет

множество

инструментов-

, по

зволяющих

нам легко точнои

идентифицировать элементы

страницы

для выполнения

манипуляций

над ними .

 

 

 

 

 

 

 

В этой главе

мы исследовали

значительную

 

часть

фундамента - , факти

чески не выполняя никаких

операций

над элементами

DOM страницы .

Зато сейчас

мы знаем , как выбрать

элементы

, на которые

нужно-

воз

действовать

, мыи готовы

вдохнуть

жизньнашив

страницы помощьюс

 

методов jQuery.