Изучение PHP. Запись 2 (Знакомство с jQuery)

Метод index()

Сегодня удалось позаниматься совсем немного. Самым сложным из изученного за сегодня оказался метод объекта jQuery под названием index(), предназначенный для поиска индекса определенного html элемента в объекте jQuery.
В чем же сложность?
1. В качестве аргумента этому методу передается либо объект html, либо jQuery:

     var elems = $('body *');
    // найти индекс с использованием базового DOM API
    var index = elems.index(document.getElementById("oblock"));
    console.log("Индекс, найденный с использованием DOM-элемента: " + index);
    // найти индекс с использованием другого объекта
    // jQuery
    index = elems.index( $('#oblock') );
    console.log("Индекс, найденный с использованием объекта jQuery: " + index);

И ведут они себя по разному: как я понял, если передать в него массив объектов html, то ничего хорошего не получится. Например вот этот код выведет в консоль -1:

var elems = $('body *');
// найти индекс с использованием базового DOM API
var index = elems.index(document.getElementsByTagName("img"));
console.log("Индекс, найденный с использованием DOM-элемента: " + index);

Зато объект jQuery с несколькими объектами html внутри в качестве аргумента возвращает индекс первого из них. Тут все работает, выводится индекс первого элемента. В моем случае, шестого:

var elems = $('body *');
index = elems.index( $('img') );
console.log("Индекс, найденный с использованием объекта jQuery: " + index);
});

2. Можно ввести в качестве аргумента и просто строку c селектором:

var imgElems = $('img:odd');
// найти индекс с использованием селектора 
index = imgElems.index("body *");
console.log("Индекс, найденный с использованием селектора: " + index);

В таком случае порядок выполнения запросов поменяется - сначала будут выбраны все элементы внутри тега body, а потом уже в них будет искаться элемент, соответствующий первому элементу html в объекте jQuery. То есть, по сути, мы получаем то же самое выражение что и:

index = $("body *").index(imgElems); 

Так что функция со своими нюансами )

Цепочки методов

Я и раньше пользовался этой удобнейшей функцией, позволяющей применять методы jQuery буквально со скоростью конвейера:

$('label').css("color","blue").css("font-size", ".75em");

однако раньше я не задавался вопросом, что за этим стоит! Оказывается, методы jQuery всегда возвращают другие (измененные ранее) объекты jQuery! Это многое прояснило для меня. В ходе выполнения цепочки методов мы можем добавлять в объект новые html-элементы, делать из них выборки, применять фильтры, а результат этих махинаций - новый объект jQuery будет возвращен и доступен для изменений следующим звеном цепочки...Гениально!

Одновременное воздействие на множество элементов

Тут всего лишь небольшая ремарка назавтра чтобы не забыть.
Понятно, что jQuery можно использовать для изменения одновременно нескольких элементов в DOM:

 $('label').css("color", "blue");

Этот код, к примеру, поменяет цвет всех лейблов. Нужно прояснить для себя в таком случае, в каких случаях применяется метод each().
Ответ: метод each() применяется в случае, если для определенного списка элементов нам необходимо вызвать какую-то написанную нами функцию. Эта функция и передается в качестве параметра в метод each().

Comments

vedro-compota's picture

Оказывается, методы jQuery всегда возвращают другие (измененные ранее) объекты jQuery

да, это очень удобно когда объект много работает "сам над собой". Возвращая "this" подобного эффекта можно добавить во многих ЯП.

_____________
матфак вгу и остальная классика =)

Voronve's picture

Вот за такие вещи я и люблю программирование - как же все продумано!