Главная » Статьи » Web-программирование » JQuery

jQuery. Селекторы

Последнее время мне всё чаще задают вопрос как выбрать тот или иной элемент в DOM`е, и данный пост будет сплошь посвящен селекторам в jQuery, возможно большинство из них Вы видели в различных источниках, но собрать их воедино все же стоит...


Во всех примерах используется сокращенный вариант вызова jQuery методов, используя функцию $ (знак доллара)


Селекторы в jQuery

Селекторы в jQuery базируются на CSS селекторах, а так же поддерживают XPath.
Дабы не закапываться в документацию буду приводить примеры, много примеров.
Но начнем с самых азов...

Для начала нам понадобиться макет HTML странички (вполне типичный макет):

Code
<div id="header">
<h1><a href="/" title="homepage">Title</a></h1>
<h2>Sub-title <span>small description</span></h2>
</div>
<div id="wrapper">
<div id="content">
<div class="post">
<h3>Post Title</h3>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
vel varius augue tortor vel tortor.</p>
<span>Image Title</span>
<img src="/image1.jpg" alt="Image Alt Text"/>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
vel varius augue tortor vel tortor.</p>
<span class="inner-banner">Banner Text</span>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
vel varius augue tortor vel tortor.</p>
</div>
<span id="banner"><img src="/banner1.jpg" alt="Big Banner"/></span>
<div class="post">
<h3>Post Title</h3>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
vel varius augue tortor vel tortor.</p>
<span>Image Title</span>
<img src="/image2.jpg" alt="Image Alt Text"/>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
vel varius augue tortor vel tortor.</p>
<span class="inner-banner">Banner Text</span>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed viverra tempus sapien.
Cras condimentum, tellus id lacinia fermentum, tortor lectus tincidunt sapien,
vel varius augue tortor vel tortor.</p>
</div>
</div>
</div>
<div id="sidebar">
<ul>
<li><a href="/item0.html">Menu Item 0</a></li>
<li><a href="/item1.html">Menu Item 1</a></li>
<li><a href="/item2.html">Menu Item 2</a></li>
<li><a href="/item3.html">Menu Item 3</a></li>
</ul>
</div>
<div id="footer">
Copyright &copy; 2008
</div>

А теперь приступим к выборкам:

Выбор элементов по Id либо ClassName аналогично используемому в CSS1

Code
$('#sidebar'); // выбор элемента с id = sidebar
$('.post'); // выбор элементов с class =
post
$('div#sidebar'); // выбор элемента div с id =
sidebar
$('div.post'); // выбор элементов div с class =
post

Примечание: используйте валидные имена классов и id


Бродим по иерархии объектов в DOM`е

Простой выбор потомков:

Code
$('div span'); // выбор всех span элементов в элементах div

Аналогичный результат так же можно получить используя следующую конструкцию:

Code
$('div').find('span'); // выбор всех span элементов в элементах div

Выбор только непосредственных потомков:

Code
$('div > span'); // выбор всех span элементов в элементах div, где span является прямым потомком div'a

Как же лучше поступить, что работает быстрее?
Надо бы протестировать...

Так же селекторы можно группировать:

Code
$('div, span'); // выбор всех div и span элементов

Поиск по соседям:

Code
$('span + img'); // выбор всех img элементов перед которыми идут span элементы
$('span ~ img'); // выбор всех
img элементов после первого элемента span
$('#banner').prev(); // выбор предыдущего элемента от найденого
$('#banner').next(); // выбор следующего элемента от найденого

Выбор всех элементов, всех предков, всех потомков:

Code
$('*'); // выбор всех элементов
$('p > *'); // выбор всех потомков элементов
p
$('p').children(); // --
$('p').parent(); // выбор всех прямых предков элементов
p
$('* > p'); // выбор всех предков элементов
p (скорей всего Вам не понадобится)
$('p').parents(); // --
$('p').parents('div'); // выбор всех предков элемента
p которые являются тегами div (parents принимает в качестве параметра селектор)

Фильтры

Фильтров в jQuery реализовано достаточно много, и пользоваться ими одно удовольствие:

Code
$('div:first'); // выбираем первый div в доме
$('div:last'); // выбираем последний
div в доме
$('div:not(.red)'); // выбираем
div'ы у которых нет класса red
$('div:even'); // выбираем четные 
div'ы
$('div:odd'); // выбираем нечетные
div'ы
$('div:eq(N)'); // выбираем
div идущим под номером N в DOMe
$('div:gt(N)'); // выбираем
div'ы, индекс которых больше чем N в DOMe
$('div:lt(N)'); // выбираем
div'ы, индекс которых меньше чем N в DOMe
$(':header'); // выбо заголовоков
h1, h2, h3 и т.д.
$('div:animated'); // выбор элементов с активной анимацией

Фильтры по контенту и видимости:

Code
$('div:contains(text)'); // выбираем div содержащие текст
$('div:empty'); // выбираем пустые
 div
$('div:has(p)'); // выбираем
div'ы которые содержат p
$('div.red').filter('.bold') // выбираем
div которые содержат класс red и класс bold
$('div:hidden'); // выбираем скрытые 
div
$('div:visible'); // выбираем видимые
 div

Так же есть фильтры по атрибутам:

Code
$("div[id]"); // выбор всех div с атрибутом id
$("div[title='my']"); // выбор всех div с атрибутом title=
my
$("div[title!='my']"); // выбор всех
div с атрибутом titleне равного my
$("div[title^='my']"); // выбор всех
div с атрибутом titleначинающихся с my
// <div title="myCat">,<div title="myCoffee">, <div title="my...">
$("div[title$='my']"); // выбор всех div с атрибутом title заканчивающихся на my
// <div title="itsmy">,<div title="somy">, <div title="...my">
$("div[title*='my']"); // выбор всех div с атрибутом title содержащим my
// <div title="itsmy">,<div title="myCat">, <div title="its my cat">,<div title="...my...">

так же стоит отдельно отметить следующий фильтр:

Code
$("a[rel~='external']"); // выбор всех A с атрибутом rel содержащим external в списке значений разделенных пробелом

В результате его работы будут выбраны следующие теги:

Code
<a href="" rel="external">link</a> - да
<a href="" rel="nofollow external">link</a> - да
<a href="" rel="external nofollow">link</a> - да
<a href="" rel="friend external follow">link</a> - да
<a href="" rel="external-link">link</a> - нет

Для работы с элементами форм есть ряд селекторов позволяющий выбирать по типу элемента и фильтров - enabled/disabled/selected/checked :

Code
$(":text"); // выбор всех input элементов с типом =text
$(":radio"); // выбор всех input элементов с типом =radio
// и так далее
$("input:enabled"); // выбор всех включенных элементов input
$("input:checked"); // выбор всех отмеченных чекбоксов

Фильтры можно группировать:

Code
$("div[name=city]:visible:has(p)"); // выбор видимого div'a с именем city, который содержит тег p

Приведу так же ряд полезных селекторов для работы с элементами форм:

Code
$("form select[name=city] option:selected").val(); // получение выбранного(-ых) элементов в селекте city
$("form :radio[name=some]:checked").val(); // получение выбранного значения радиобатона с именем some
$("form :checkbox:checked"); // выбор всех выбранных чекбоксов


Автор: Антон Шевчук
Источник: www.Anton.Shevchuk.name



Категория: JQuery | Добавил: likbezz (19.05.2010)
Просмотров: 7329 | Теги: CSS, Script, метод, DOM, Селекторы, Java, JavaScript, XPath, jQuery, HTML
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]