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

2

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

2.2. Создание новых

элементов

HTML

 

 

 

 

73

 

 

 

Независимо

от формы

записи инструкция

получается достаточно-

объ

емной – для удобочитаемости

мы разбили

ее на несколько

стрдо-к

и

 

бавили отступы –, но она выполняет множество

операций

. Такие-

ин

струкции

достаточно

часто

встречаютсястраницахв

, использующих

 

 

jQuery, но не беспокойтесь , если она кажется

вам малопонятной– мы

,

 

подробно

рассмотрим

все методы , использованные

здесьследующих, в

 

 

нескольких главах . Создание подобных составных инструкций-

со вре

менем станет

вашей второй

натурой .

 

 

 

 

 

 

 

На рис .2.5 показано , как выглядит изображение , созданное этойин струкцией . Сначала сразу после того , как страница будет загружена (2.5a), азатем после щелчка мышью (2.5b).

Рис . 2.5a.Создание сложных элементов таких,

как это изображение ,

при щелчке на котором выводится диалог реализуется,

очень просто

Рис . 2.5b.Динамически сгенерированное изображение обладает всеми ожидаемыми свойствами включая, вывод диалога в случае щелчка мышью

74

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

 

 

 

Страница HTML, которойв реализован этот пример , включенасостав загружаемого пакета примеровидев файлаchapter2/listing-2.1.html.

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

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

 

 

обернутым

 

набором

 

элементов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Как только

унас появился

обернутый

набор

элементов , полученный

 

из существующего

дерева

DOMпомощьюс

селекторов

или созданный

 

из фрагментов

 

HTMLразметки

( илирезультатев

применения обоих

 

способов сразу ), мы можем

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

этими

элементапомои- с

 

щью всевозможных

методов

jQuery.

Эти методы

будут

рассматривать-

ся в следующей

главе . Но что , если мы еще не совсем готовыэтомук?

 

Что , еслидалее нам потребуется

 

уточнить

 

набор

элементов

, обернутых

функцией

jQuery?

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

мы исследуем

различные

способы

 

уточнения

, расширения набора

обернутых

элементоввыделение

из

 

него подмножества

элементов

, над которыми будут производиться-

не

которые операции .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Лабораторная

 

работа : операции

 

 

 

 

 

 

Чтобы помочь

вам наглядно

представить

происходящее

, мы-пред

 

 

лагаем еще одну лабораторную

работу– jQuery Operations Lab, вклю-

 

 

 

 

чив ее взагружаемый

пакетпримерамис

кэтой главе

виде файла

 

 

 

 

chapter2/lab.operations.html. По виду эта страница

 

(рис2.6). похожа

 

 

 

 

на страницуSelectors Lab, которую

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

 

ранееэтойв главе .

 

 

Новая лабораторная

работа

не только

похожа

на страницуSelectors

 

 

 

 

Lab, она и функционирует

 

аналогично

. Только

вместо

селекторов

 

 

здесь вводятсяоперации jQuery

над обернутыми

 

наборами

элемен-

 

 

тов . Операции

применяются разметке впанели DOM Sample ( При-

 

 

 

 

мер дерева

DOM),

где , так же какнаистранице Selectors Lab, ото-

 

 

 

 

бражаются

результаты

выполнения

операций .

 

 

 

 

 

 

 

В некотором

смысле

страницаjQuery Operations Lab более

универсаль-

 

 

 

 

на , чем Selectors Lab. Последняя

позволяет

вводить

единственный

 

 

селектор

, аjQuery Operations Lab дает возможность

 

ввести

любое-

 

вы

 

 

ражение , которое будет воздействовать

 

на обернутый

набор-

эле

 

 

ментов . Так как jQuery позволяет

составлять

 

цепочки

методов ,

 

 

вводимое

выражение

может

также

включать

 

методы

обертки , что

 

делает эту страницу

более

мощнойсмыслев

исследования

 

опера-

 

 

ций jQuery.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.3. Манипулирование обернутым

набором

элементов

 

75

 

 

 

 

 

Учтите , что вводимые

методы

должны иметьдопустимый синтак-

 

сис , так же как выражения , которыезультатев

дают

обернутые

 

наборы элементов .противномВ

случае вы столкнетесьошибкас -

 

ми выполнения программного

кода JavaScript.

 

Рис . 2.6.Страница jQuery Operations Lab поможет увидеть , как создаются обернутые наборы элементов и как можно манипулировать ими

Чтобы получить первое представление том , как действует эта страница , откройте еесвоем броузере , введите следующий текст в поле Operation ( Операция ):

$(‘img’).hide()

и щелкните по кнопкеExecute ( Выполнить ).

76

 

 

 

 

Глава

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

для дальнейшей работы

 

 

 

 

 

 

 

 

 

 

Эта операция

будет

выполнена контекстев

фрагмента

разметки

 

 

 

 

DOM Sample, и после

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

вы увидите , что изображение-

 

ис

 

чезло . После

выполнения

любой

операции вы сможете

восстано-

 

вить содержимое

панелиDOM Sample в исходное

состояние

, щелкнув

 

 

по кнопкеRestore ( Восстановить ).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В следующем разделе

мы увидим , как работает

эта новая

страница .

А кроме

того , она пригодится

вам для проверки

действия

различных

операций

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

главах .

 

2.3.1. Определение размераобернутого набора элементов

Ранее говорилось , что обернутый набор элементовбиблиотекев jQuery может рассматриваться как массив. Это сходство включает также -свой ство length, которым обладают массивы JavaScript, определяющееко личество обернутых элементов .

Если

кто -то предпочитает использовать методне ,свойствоа

, библио-

тека

jQuery

определяет

ещеметоди size(), который

возвращает

ту же

самую информацию .

 

 

 

 

 

 

Рассмотрим

следующую

инструкцию :

 

 

 

 

$(‘#someDiv’)

 

 

 

 

 

 

.html(‘There are ‘+$(‘a’).size()+’ link(s) on this page.’);

 

 

Вложенное

выражение

jQueryэтойв

инструкции

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

всем

элементам типа<a> и возвращает число элементовнейв спомощью

ме-

тода size(). Это число используется

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

текстовой

строки , которая затем посредством

методаhtml() ( его мы рассмотрим

в следующей

главе ) превращаетсясодержимоев

элемента идентифис -

катором id( ) someDiv.

 

 

 

 

 

 

Формальный

синтаксис

методаsize():

 

 

 

 

 

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

size()

Возвращает число элементовобернутомв наборе

Параметры

нет

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

Количество элементов

2.3. Манипулирование обернутым набором элементов

77

Итак , теперь вам известно , сколько элементов содержитсянаборев . Можно ли обратиться нимк напрямую ?

2.3.2. Получение

элементов

из обернутого

набора

Обычно , получив обернутый набор

элементов , мы тут же можемвыпол

нить над ним какую -либо операциюпомощьюс

методов

jQuery. Напри-

мер , можно

скрыть

их всепомощьюс

методаhide(). Но вполне возмож-

на ситуация

, когда

нам потребуется получить

прямой доступэлемен-к

там для выполнения

над ними

низкоуровневых

операций средствами

языка JavaScript.

 

 

 

 

 

 

 

Рассмотрим

некоторые из способов

решения этой задачи , предоставляе-

мых библиотекой

jQuery.

 

 

 

 

 

Извлечение элементов по индексу

Так как jQuery позволяет рассматривать обернутый набор как массив JavaScript, можно просто использовать индексы массива , чтобыпо лучить любой элемент обернутомв наборе по его индексу . Например , получить первый элемент наборев всех элементов<img> на странице

с атрибутом alt можно так :

var imgElement = $(‘img[alt]’)[0]

Если кто -то предпочитает

вместо

индекса массива

использовать метод ,

для тех же целей jQuery

определяет

методget().

 

 

 

 

 

 

 

 

Синтаксис

методаget

 

 

get(index)

 

 

 

 

 

 

 

Получает

один или все элементыобернутомв

наборе . Если

параметрindex

не указан , возвращаются

все элементы

обернутого наборавиде массива

JavaScript. Если параметрindex определен

, возвращается

элементукас-

занным индексом .

 

 

 

 

 

 

Параметры

 

 

 

 

 

 

index

(число ) Индекс единственного

 

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

элемента . Если

 

он опущен , возвращается

весь наборвидев массива .

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

Элемент DOM или массив элементов DOM.

Фрагмент

var imgElement = $(‘img[alt]’).get(0)

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

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

ция получения

элемента

массива по индексу .

 

Метод get() может также

принимать отрицательные

индексыэтом. В

случае значение

параметра будет определять

индекс

элемента - относи

78

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

 

 

 

тельно конца обернутого набора . Например , вызов.get(-1) вернет последний элемент обернутого набора , вызов.get(-2) – предпоследний и так далее .

Кроме того , методget() может возвращать массив элементов .

Чтобы получить массив JavaScriptэлементамис из обернутого набора , предпочтительнее использовать методtoArray() ( рассматривается слев - дующем разделе ); при этом методget() также позволяет получить этот результат .

Такой способ получения

массива предоставляетсяцельюс сохранения

 

обратной совместимости предыдущимис

версиями

jQuery.

 

 

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

один элемент

DOM, но иногда бывает

необхо-

димо получить обернутый набор , содержащий

определенный

элемент ,

а не сам элемент . Было

бы странно , если бы мы были вынуждены-

ис

пользовать , например

, такие инструкции , как :

 

 

$($(‘p’).get(23))

Поэтому вбиблиотеке jQuery был реализован методeq(), имитирую - щий действие фильтра:eq.

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

eq(index)

Получает индекс элементаобернутомв наборе возвращаети новый обернутый набор , содержащий только этот элемент .

Параметры

 

index

(число ) Индекс единственного возвращаемого элемента

. Как

 

и в методе get(), допускается использовать отрицательные-

ин

 

дексы .

 

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

Обернутый набор , содержащий один или ноль элементов .

Получение первого элемента обернутого набора является настолько-

рас

пространенной операцией

, что для нее был добавлен метод , который

еще больше

упрощает ее выполнение

, – методfirst().

 

 

 

 

 

 

 

 

 

 

Синтаксис

методаfirst

 

 

 

first()

 

 

 

 

 

 

 

Получает

первый элемент обернутого

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

новый оберну-

 

 

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

только

этот элемент . Если оригинальный-

оберну

тый набор

пуст , то этот метод возвращает пустой набор .

 

 

 

 

 

 

 

 

 

 

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

обернутым

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

 

79

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Параметры

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

 

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

значение

 

 

 

 

 

 

 

 

Обернутый набор , содержащий

один или ноль элементов .

 

 

 

 

 

 

 

 

 

Как иследовало

ожидать , существует также соответствующий

метод ,

возвращающий

последний элемент обернутого набора .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Синтаксис

методаlast

 

 

 

 

 

 

last()

 

 

 

 

 

 

 

 

 

 

Получает последний элемент обернутого набвозвращаети

новый

обер-

 

 

нутый

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

только этот элемент . Если оригинальный-

обер

 

нутый

набор пуст , то этот метод

возвращает пустой набор .

 

 

 

 

 

Параметры

 

 

 

 

 

 

 

 

 

нет

 

 

 

 

 

 

 

 

 

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

Обернутый набор, содержащий один или ноль элементов .

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

Извлечение

всех элементоввиде массива

 

 

Чтобы получить

все элементы

обернутого

наборавиде вобычного мас-

сива JavaScript

элементов DOM, можно использовать

toArray()метод ,

предоставляемый

библиотекой

jQuery:

 

 

 

 

 

 

 

 

 

 

 

Синтаксис

методаtoArray

 

 

toArray()

 

 

 

 

 

 

Возвращает

элементы , содержащиесяобернутомв

наборе виде,

массива

элементов DOM.

 

 

 

 

 

Параметры

 

 

 

 

 

 

нет

 

 

 

 

 

 

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

Массив JavaScript элементов DOM.

80

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

 

 

 

Рассмотрим следующий пример :

var allLabeledButtons = $(‘label+button’).toArray();

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

отберет все элементы<button> на странице , которым -

не

посредственно

предшествуют элементы<label>, и создаст из них массив

JavaScript, который затем будет присвоен переменнойallLabeledButtons.

 

Определение индекса элемента

Мы можем использовать обратную операцию ,index()метод, – поиск индекса определенного элементаобернутомв наборе . Методindex() имеет следующий синтаксис :

 

 

 

Синтаксис

методаindex

 

 

 

 

 

 

 

index(element)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Отыскивает заданный элементобернутомв

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

его ин-

 

 

декс в обернутом

наборе

или индекс

первого

элемента

среди

элементов

одного

уровня

вложенности

. Если указанный

элемент

отсутствуетна-

 

в

боре , возвращается значение-1.

 

 

 

 

 

 

 

 

 

 

Параметры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

element

(элемент

| селектор

) Ссылка

на элемент , индекс которого-

требу

 

ется определить

, или селектор , идентифицирующий

элемент .

 

Если

параметр

опущен , отыскивает

первый элементспискев

 

 

 

элементов одного уровня вложенности .

 

 

 

 

 

 

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

значение

 

 

 

 

 

 

 

 

 

 

 

 

Порядковый номер указанного

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

наборе или-1, если

 

 

элемент

внаборе отсутствует .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Допустим

, по некоторым

причинам

нам нужно

узнать индекс - изобра

жения сидентификатором findMe в обернутом наборе

всех изображений

на странице . Это значение

можно получить

так :

 

 

 

 

var n = $(‘img’).index($(‘img#findMe’)[0]);

Можно также использовать более краткую форму записи :

var n = $(‘img’).index(‘img#findMe’);

Метод index() можно также

использовать для определения индекса-

те

кущего элемента пределахв

его родительского элемента

( то есть среди

элементов одного нимс уровня вложенности ). Например

,

 

var n = $(‘img’).index();

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

обернутым

набором

элементов

 

 

 

 

 

 

 

81

 

 

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

присвоит переменнойn значение индекса первого -эле

мента <img> в его родительском

элементе .

 

 

 

 

 

 

 

 

 

 

Теперь узнаем , можно ли вместо одного

элемента получить

уточненный

набор

элементов

, который

был обернут .

 

 

 

 

 

 

 

 

 

 

2.3.3. Получение

срезов

обернутого

 

набора

элементов

После

получения

обернутого

набора

элементов

 

нам может

потребо-

ваться

уточнить

этот набор , добавив

или убрав часть элементов-

перво

начального

множества . Библиотека

jQuery

 

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

 

множество

методов для управления

набором

обернутых

элементов

. Прежде

всего

рассмотрим возможность добавления элементовнаборв.

 

 

 

 

 

 

Добавление

дополнительных

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

набор

 

Нередки

ситуации , когда

требуется

добавить

дополнительные -

элемен

ты в имеющийся

обернутый

набор . Эта возможность

полезнее

прочих ,

если после

применения

каких -либо методовпервоначальномук

 

набору

нужно

добавить

дополнительные

элементы

 

. Не забывайте

 

проспособ

ность

jQuery

объединять

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

, что позволяет

выполнить

огромный

 

объем

работы

единственной

инструкцией .

 

 

 

 

 

В дальнейшем

мы познакомимсянекоторымис

подобными

ситуациями ,

а для начала

рассмотрим

простейший

случай . Предположим

, нам нужно

отыскать

все элементы<img>, в которых определен

атрибутalt или title.

 

 

Возможности

селекторов

jQuery позволяют

 

выразить видеэто водного

 

селектора

:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

$(‘img[alt],img[title]’)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Но чтобы

проиллюстрировать

добавлениепомощьюс

методаadd(), по-

 

 

лучим

тот же самый

набор иначе :

 

 

 

 

 

 

 

 

 

 

 

 

$(‘img[alt]’).add(‘img[title]’)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Такое

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

методаadd() позволяет

объединять

несколько-

 

се

лекторов

по условиюИЛИ, создавая

объединение

 

элементов

, соответ-

ствующее

 

сразу

обоим селекторам .

 

 

 

 

 

 

 

 

 

 

 

 

Важно также отметить , что такие методы ,add()как ( обеспечивающие

 

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

гибкость

сравнении

сагрегатными

селекторами

),

при использовании цепочкахв

методов

jQuery

не изменяют

оригиналь-

ный обернутый

наборсоздают,

новый. Чуть ниже мы увидим , насколь-

ко полезным

может оказаться это обстоятельство

, особенносочетаниив

 

 

с методом end() ( который

мы

исследуемразделев

2.3.6), позволяющим

 

« откатить

 

» операции

, изменяющие

состав

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

 

обернутого

набора

элементов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Метод add() имеет

следующий

синтаксис

:

 

 

 

 

 

 

 

 

 

 

82

 

 

 

 

Глава 2. Выбор

элементов

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

работы

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Синтаксис

методаadd

 

 

 

 

 

 

 

 

 

 

add(expression,context)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Создает

копию

обернутого

наборакоторую, в

добавляет

 

элементы

, опреде-

 

 

 

ляемые

параметромexpression. Параметр expression может быть селекто-

 

 

 

 

ром , фрагментом HTMLразметки , элементом

DOM или массивом-

 

элемен

 

тов DOM.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Параметры

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

expression (строка

|

элемент

| массив ) Определяет

,

что должно быть-

 

до

 

 

бавлено

в набор . Этот параметр

может

быть

селектором

 

 

 

 

 

jQuery, вэтом случае любые

соответствующие

ему элемен-

 

 

 

ты будут

добавлены

внабор . Если

это фрагмент HTML-

 

 

 

 

 

разметки

, соответствующие

 

элементы

будут созданыза- и

 

 

 

тем добавлены

внабор . Если

это элементDOM или массив

 

 

 

 

 

элементов DOM, они будут добавлены наборв .

 

 

 

 

 

 

context

(селектор

| элемент

| массив

|

обернутый

набор ) Определяет

 

 

контекст

 

, впределах

которого

будет выполняться

поиск

 

 

 

элементов

, соответствующих

 

первому

параметру

. Это тот

 

 

же самый контекст , который

может передаваться

функции

 

 

jQuery(). Описание

этого параметра

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

2.1.1.

 

 

 

 

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

значение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Копия

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

набора

элементов

, включающая

дополнительные

 

элементы .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Упражнение

 

 

 

 

 

 

Откройте страницуjQuery Operations Lab в броузере введите

следую-

 

 

щее выражение

:

 

 

 

 

 

 

 

 

 

$(‘img[alt]’).add(‘img[title]’)

 

 

 

 

 

 

 

 

и щелкните

по кнопкеExecute ( Выполнить ). Врезультате

должна

 

 

быть выполнена

операция

jQuery, результатом которой

будут

 

все

изображения

установленным атрибутомalt или title.

 

 

 

 

Если внимательно

исследовать

исходный

код HTMLразметкипа-

 

в

нели DOM Sample, можно заметить

, что все изображенияцветамис

 

 

имеют атрибутalt, изображения

со щенками

имеют атрибутtitle,

 

 

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

кофейникомс

не имеет

ни того , ни другого

атрибу-

та . Таким образом , можно

ожидать , что все изображения

,-за ис

ключением

изображения кофейникомс

, войдут состав

оберну-

 

того набора . На рис2..7 приведен

снимок экрана полученнымис

 

результатами .