css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
4 Май
В первой статье по документации jQuery мы знакомились с функциями ядра библиотеки. В этой статье мы продолжим знакомиться с API jQuery, и постараемся разобраться с селекторами jQuery. Тема довольно большая, поэтому в этой статье будут приведены сведения по базовым и иерархическим селекторам, а также базовым фильтрам.
возвращает: Array
Выбирает единственный элемент с переданным атрибутом id. Если id содержит специальные символы, их необходимо экранировать с помощью обратного слэша.
Выбираем элемент с id «myDiv» (затем устанавливаем ему красную рамку шириной 3 пиксела).
$("#myDiv").css("border","3px solid red");
Откройте пример в отдельном окне и посмотрите исходный код.
Выбираем элемент с id «myID.entry[1]» (затем устанавливаем ему красную рамку шириной 3 пиксела). Посмотрите каким образом некоторые символы должны быть экранированы с помощью обратного слэша.
$("#myID\\.entry\\[1\\]").css("border","3px solid red");
возвращает: Array
Выбирает все элементы с переданным именем.
Ищем все элементы DIV (затем устанавливаем ему красную рамку шириной 3 пиксела). Аргументом является строка с названием элемента, которые необходимо выбрать. Ссылается на tagName узлов DOM.
$("div").css("border","3px solid red");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбирает все элементы с переданным именем класса. Аргументом является строка с именем класса. Если элемент имеет несколько имен классов, по одному из них он будет выбран.
Выбираем элементы с классом «myClass» (затем устанавливаем ему красную рамку шириной 3 пиксела).
$(".myClass").css("border","3px solid red");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбирает все элементы. В примере выбираем все элементы (включая head, body, и т.д.), затем устанавливаем им (всем) красную рамку шириной 3 пиксела.
$("*").css("border","3px solid red");
Откройте пример в отдельном окне и посмотрите исходный код.
А вот простой путь, чтобы отыскать все элементы в контексте document.body.
$("*", document.body).css("border","3px solid red");
Таким образом элементы head, script, и т.д. не включаются в набор. Да, и конечно красная рамка шириной 3 пиксела…
возвращает: Array
Собирает набор из всех элементов переданных в селекторах. Вы можете определить любое количество селекторов для объединения в единый результат. Заметьте, что порядок следования элементов в DOM и объекте jQuery не обязательно будет идентичным.
Ищем элементы, которые соответствуют любым элементам div, span и p с именем класса myClass и для всех их устанавливаем красную рамку шириной 3 пикселаааааа…
$("div,span,p.myClass").css("border","3px solid red");
Откройте пример в отдельном окне и посмотрите исходный код.
А вот так можно показать порядок следования элементов в объекте jQuery (заметьте, не в HTML-коде страницы!).
var list = $("div,p,span").map(function () {
return this.tagName;
}).get().join(", ");
$("b").append(document.createTextNode(list));
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбираются все элементы потомки элемента, определенного как предок. В общем лучше конечно на простом примере.
Ищем все элементы input, являющиеся потомками элемента form (и устанавливаем синюю рамку из точек, шириной 2 пиксела).
$("form input").css("border", "2px dotted blue");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбираются все прямые наследники элемента-родителя. Опять же, лучше показать на примере.
Ищем все прямые наследники элемента с идентификатором «main» (в примере #main с желтым бэкграундом) и устанавливаем им двойную рамку красного цвета шириной в 3 пиксела.
$("#main > *").css("border", "3px double red");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбираются все элементы, которые являются следующими (next) за элементом, определенным как предыдущий (prev). Смотрим на примере.
Ищем все элементы input, которые следуют непосредственно за элементом label, устанавливаем текст синего цвета и вставляем значение Labeled!
$("label + input").css("color", "blue").val("Labeled!")
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбираются все сестринские элементы, которые следую сразу за элементом prev. Также разберем на примере.
Ищем все элементы div, которые являются сестринскими по отношению друг к другу и следуют сразу за элементом с идентификатором #prev. Обратите внимание, что в примере не будут отобраны элементы span, поскольку отбор идет только для элементов div.
$("#prev ~ div").css("border", "3px groove blue");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбирается первый элемент соответствующего селектора.
Ищем первую строку в таблице и устанавливаем для нее наклонное начертание шрифта.
$("tr:first").css("font-style", "italic");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбирается последний элемент соответствующего селектора.
Ищем последнюю строку в таблице, устанавливаем для нее желтый фон и жирный шрифт.
$("tr:last").css({
backgroundColor: "yellow",
fontWeight: "bolder"
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Отфильтровывает выбранные элементы, используя условие отрицания. На примере будет намного понятнее…
Ищем все элементы input, которые НЕ отмечены флажками выбора, а также элементы span, следующие непосредственно за ними.
Обратите внимание, что никаких изменений по клику на чекбоксах не происходит, но это вполне понятно, поскольку в пример не включена обработка событий.
$("input:not(:checked) + span")
.css("background-color", "yellow");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбираются четные элементы. Отсчет начинается от 0.
Ищем четные строки таблицы, выбирая первую, третью и так далее. Обратите внимание еще раз: четные – потому что отбор производится по индексам, соответственно отбираются строки с индексами 0, 2, 4 и т.д.).
$("tr:even").css("background-color", "#bbbbff");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбираются нечетные элементы. Отсчет начинается от 0.
Ищем нечетные строки таблицы, выбирая вторую, четвертую и так далее. Обратите внимание еще раз: нечетные – потому что отбор производится по индексам, соответственно отбираются строки с индексами 1, 3, 5 и т.д.).
$("tr:odd").css("background-color", "#bbbbff");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбирается единственный элемент по его индексу.
Например, ищем третий элемент TD. Не забывайте, что отсчет ведется от 0.
$("td:eq(2)").css("color", "red");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбираются все элементы с индексом больше указанного в селекторе.
В примере будут выбраны все элементы TD с индексом более 4, т.е. от 5 и более. Отсчет ведется от 0.
$("td:gt(4)").css("text-decoration", "line-through");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбираются все элементы с индексом меньше, чем указан в селекторе.
Например ищем все элементы TD, с индексом меньше 4. Отсчет ведется от 0.
$("td:lt(4)").css("color", "red");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбираются все элементы, которые являются заголовками, например h1, h2, h3 и так далее.
В примере мы устанавливаем серый цвет для бэкграунда и синий для текста для всех заголовков (т.е. элементов h) на странице.
$(":header")
.css({ background:'#CCC', color:'blue' });
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Выбираются все элементы, которые в настоящий момент являются анимированными.
В приведенном ниже примере мы щелчком мыши по кнопке меняем цвет анимированного элемента DIV. Элементы DIV, не являющиеся в этот момент анимированными, свой цвет не изменяют.
$("#run").click(function(){
$("div:animated").toggleClass("colored");
});
function animateIt() {
$("#mover").slideToggle("slow", animateIt);
}
animateIt();
Откройте пример в отдельном окне и посмотрите исходный код.
Отзывов (28) на «jQuery API: Selectors – селекторы jQuery: базовые и иерархические селекторы, базовые фильтры.»
Спасибо вам за статьи, очень полезно!
Огромное спасибо за статьи
а как найти порядковый номер элемента (eq), на который кликает юзер
пример
ссылка 1
ссылка 2
$j(«#48 .108″).click(function(){
//что угодно });
если кликнуть по ссылке 1(2), то как программно узнать eq() ?
Вы немного неправильно формулируете. eq(index) «урежет» набор элементов до единственного, указанного в index. А получить информацию о индексе элемента в наборе можно так:
$('a').click(function(){ alert($('a').index(this)); });Правильно ли я понимаю, что нельзя использовать селектор вида div#test ? Это потому что подразумевается, что на странице не может быть элементов с одинаковым id даже разного типа?
id в пределах документа действительно должен быть уникальным, на то он и идентификатор. Но селектор div#test использовать можно, просто грамотнее было бы написать #test – это сработает быстрее. А вот при выборе элементов на основании имени класса наоборот, лучше написать div.test
а как например можно обратьться к четной строке таблицы, если к строке я обращаюсь через ‘this’
this – это ссылка на элемент или набор элементов в текущем контексте. Если Вы обращаетесь к строке, указывая this, как можно говорить о четности и нечетности? Это одна строка….
Другое дело, что в селекторе можно указать tr:even, отобрав таким образов все четные строки или tr:odd – нечетные.
Здравствуйте!
В первую очередь, Геннадий, спасибо за сайт.
У меня такой вопрос: я перебираю в цикле each некоторое количество элементов tr. У этих элементов мне нужно получить доступ к потомкам td b. Как это сделать?
var n = $(this).find('b').text();в n будет содержаться текст, который находится в b. Если элементов b несколько – в n будет текст всех элементов b.
Спасибо!
да, понял. надо смотреть свойство index. и уже проверять его, четно ли оно.
но я имел ввиду немного другое- как применить какой-нибудь селектор именно к ‘this’
спасибо, разобрался сам. как раз для этого есть ‘is’
а еще подскажите, пожалуйста, как можно обратиться к элементу, включая всех его потомков
См. внимательнее – на этой же странице «Иерархические селекторы». Вам нужен ancestor descendant. В примере указано form input, если же нужны все потомки этой формы, то в селекторе надо указать form *.
Если же в набор должна быть включена и сама форма, тогда следующей командой в цепочке должно следовать add(‘form’).
Т.е., если «переиграть» пример из статьи, должно получиться что-то вроде:
$(‘form *’).add(‘form’).css(‘border’, ‘2px dotted blue’);
Добрый день!
Подскажите пожалуйста.
У меня есть список
1
2
2.1
2.2
3
3.1
Мне необходимо посчитать кол-во дочерних элементов 2-го лвла (например arr[1]=0; arr[2]=2; arr[3]=1) и установить для них определенные параметры в зависимости от этой цифры, например для 2.1 и 2.2 установить css стиль width=2*10px; для 3.1 стиль width=1*10px.
Получить элементы 1-го лвла, как я понял из статьи, можно так:
var parent_objects = $(«ul > li»);
, но как теперь получить все прямые дочерние объекты для каждого parent_object’a?
Заранее спасибо
Если я вопрос правильно понял, тогда при вот такой разметке:
<ul class="firstLevel"><li>1</li>
<li>2
<ul>
<li>2-1</li>
<li>2-2</li>
</ul>
</li>
<li>3
<ul>
<li>3-1</li>
</ul>
</li>
<li>4</li>
<li>5</li>
</ul>
вот такой JS-код для примера:
var n = $('ul.firstLevel > li').each(function(){ var n = $(this).find('li').length; alert(n); });Ну и лучше конечно связать уровни с именем класса какого-то, как в примере – просто легче будет и путаницы меньше.
очень нужная статья , спасибо.
а как обратится в JQ к предыдущему элементу ?
что то вроде такого:
$(prev).slideToggle(«slow»);});
В общем Вы почти правильно написали. Только по логике «предыдущий» подразумевается относительно чего-то. Т.е. сначала находим (по id, имени класса или еще как-то) именно тот элемент относительно которого будет найден предыдущий…
$("#element").prev().slideToggle("slow");А про prev() и другие методы, позволяющие перемещаться по DOM’у читайте jQuery API: Traversing – обход DOM.
спасибо, кстати у вас и нашел тоже пример .
вот только ie8 на корню убивает задуманное почему то.
допустим:
$(«input:checkbox»).change(function() {
$(this).prev().toggle(«slow»);});
});
–
ID
несколько таких блоков.
–
IE8 только со 2ого клика по чекбоксу начинает
работать.
видно придется конкретно id указывать для каждого события.
а жаль, javascript получался компактным и логичным =(
html код порезало
в общем без привязки по id хотел сделать.
чтобы при событии клик у каждого чекбокса появлялось поле ввода для текста.
Никак не могу добраться до элемента внутри таблицы.
Есть следующий код:
$(«#all_feed div.pane»)
.live(«mouseover»,function(){
$(this).children(«.btn-delete»).show();
}).live(«mouseout»,function(){
$(this).children(«.btn-delete»).hide();
});
Как заставить появиться изображение, над дивом которого сейчас находится мышь?
Все это работает только если имадж вынести из таблицы.
Такое возможно?
А таблица там каким боком? Неужто верстка? Ай-ай…
А если серьезно – скиньте мне хоть ссылку какую-то, где можно исходник целиком посмотреть.
Как удалить последнюю строку конкретной таблицы?
Такое не работает:
$(«#t1 > tr:last»).remove();
Убирайте знак > и все будет работать…
А есть способ выбрать элементы по сразу нескольким классам? Поясню задачу: скажем есть набор блоков div, у некоторых class=»test1 test2″, а у других class=»test1 test3″, а у третьих class=»test2 test3″, и нужно выбрать те блоки у которых в атрибуте class прописаны нужные мне классы, например test2 & test1.
В версии 1.3 есть новый селектор – .class.class
Т.е. в Вашем случае надо написать:
$(".test2.test1").css("border","3px solid red");например, чтобы установить красную рамку шириной 3 пиксела всем элементам, которые имеют класс и test2, и test1.
Обсуждение статьи можно продолжить на форуме jQuery.