- •13. Создание динамического наполнения страницы. JavaScript-библиотеки и технология Comet
- •13.1. Представление объектов в виде json
- •13.1.1. Использование
- •13.1.2. Синтаксис
- •13.1.3. Использование json в Ajax
- •13.1.4. Вопросы безопасности
- •13.1.4.1. JavaScript eval()
- •13.1.4.2. Подделка кроссдоменного запроса
- •13.2. Библиотека ExtJs
- •13.2.1. Объектно-ориентированное программирование
- •13.2.1.1. Ext.Namespace
- •13.2.1.2. Ext.Override
- •13.2.1.3. Ext.Extend и соглашения о параметрах конструкторов
- •13.2.1.4. Ext.Apply
- •13.2.1.5. Ext.ApplyIf
- •13.2.2. Построение веб-интерфейсов
- •13.2.3. Использование css
- •13.2.4. Основные компоненты и возможности
- •13.2.5. Визуальные компоненты
- •13.3. Библиотека Prototype
- •13.3.1. Возможности
- •13.3.1.6. Объект Ajax
- •13.3.1.7. Класс Element
- •13.3.2. Объектно-ориентированное программирование
- •13.4. Библиотека jQuery
- •13.4.1. Философия
- •13.4.2. Использование
- •13.4.4. Инициализация
- •13.4.5. Управление элементами документов и их свойствами
- •13.4.5.1. Последовательный вызов функций
- •13.4.6. Работа с индивидуальными элементами
- •13.4.6.1. Индексы и get([index])
- •13.4.6.2. Each(fn)
- •13.4.7. Анимации
- •13.4.7.1. Animate
- •13.4.7.2. Эффекты
- •13.4.8. Ajax
- •13.5. Модель работы веб-приложений Comet
- •13.5.1. Http server push
- •13.5.2. Pooling
- •13.6. Ключевые термины
- •13.7. Краткие итоги
13.4.5.1. Последовательный вызов функций
Главная особенность большинства методов jQuery – это возможность связывать их в цепочки. Методы, манипулирующие элементами документа, обычно возвращают эти объекты для дальнейшего использования, что позволяет писать примерно следующее:
// Заполняем скрытый элемент <div id="divEdit"></div> текстом и показываем его
$("#divEdit").html(response).show();
// найти <select id="my_select">...</select>
var sel = $("#my_select");
// добавляем к нему <option value="1">Пример опции</option>
$("<option></option>") // создаем требуемый элемент
.attr("value", 1) // устанавливаем значение одного из его атрибутов
.html("Пример опции") // записываем в него текст
.appendTo(sel); // прикрепляем к уже существующему элементу
Таким образом, можно легко описать все действия, происходящие с выбранным элементом, не затрудняясь введением большого количества временных переменных.
13.4.6. Работа с индивидуальными элементами
Функция $() возвращает коллекцию элементов. Так, $("p") вернет массив всех элементов <p>, какие только могут присутствовать на странице (или пустой массив, если таких элементов не существует). Одним из условий работы большинства функций jQuery является непременная обработка всех элементов в возвращаемой коллекции.
Например:
1. Цвет всех ссылок на странице станет зеленым:
$("a").css("color", "green");
2. Ко всем элементам div с классом test будет добавлен новый элемент:
$("div.test").append("<span>Тестовый элемент</span>");
Но иногда необходимо обратиться к индивидуальным элементам возвращаемой коллекции.
13.4.6.1. Индексы и get([index])
Возвращаемая функцией $() коллекция является "псевдо-массивом" DOM-элементов. Поэтому можно обратиться к индивидуальным элементам по их индексу:
$("p")[0].className = "test";
Иногда, правда, необходимо обратиться непосредственно к массиву DOM-объектов, скрытых внутри "псевдо-массива", которым является объект jQuery. Для этого используется функция get():
$("p"); // Получили объект jQuery
$("p").get(); // Получили соответствующую коллекцию DOM-элементов
Более того, метод get позволяет обращаться непосредственно к индивидуальным элементам коллекции:
$("a").get(0); // Получили первую из всех ссылок на странице
13.4.6.2. Each(fn)
Иногда нужно пробежаться по всем элементам коллекции и выполнить над ними какие-то действия. Для этого понадобится функция each. Эта функция принимает в качестве аргумента другую функцию. each() работает в контексте найденных элементов и поэтому каждый раз, когда выполняется переданная ей функция, в этой функции доступна переменная this, указывающая на соответствующий DOM-элемент:
$("p").each(
function() {
// внутри функции this указывает на текущий DOM-элемент
alert(this.innerHTML);
}
);
В этом примере находятся все элементы p на странице, и для каждого из этих элементов вызывается функция, которая показывает его содержимое.
Функция, передаваемая в метод each(), может принимать на вход один аргумент, который является индексом текущего элемента в коллекции.
Для иллюстрации перепишем пример с раскраской нечетных строк таблицы с помощью each(). Если есть некая таблица с id="zebra" и CSS-класс "odd" для нечетных строк, то можно написать так:
$("#zebra tr").each(colorize); // передаем в each функцию colorize
function colorize(index) {
if (index % 2 == 1) // index является индексом текущего элемента в коллекции
$(this).addClass("odd");
}
