.find( selector )Returns: jQuery
Description: Get the descendants of each element in the current set of matched elements, filtered by a selector, jQuery object, or element.
-
version added: 1.0.find( selector )
-
selector
A string containing a selector expression to match elements against.
-
-
version added: 1.6.find( element )
-
element
An element or a jQuery object to match elements against.
-
Given a jQuery object that represents a set of DOM elements, the .find()
method allows us to search through the descendants of these elements in the DOM tree and construct a new jQuery object from the matching elements. The .find()
and .children()
methods are similar, except that the latter only travels a single level down the DOM tree.
The first signature for the .find()
method accepts a selector expression of the same type that we can pass to the $()
function. The elements will be filtered by testing whether they match this selector; all parts of the selector must lie inside of an element on which .find() is called. The expressions allowed include selectors like > p
which will find all the paragraphs that are children of the elements in the jQuery object.
Consider a page with a basic nested list on it:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
If we begin at item II, we can find list items within it:
1 |
|
The result of this call is a red background on items A, B, 1, 2, 3, and C. Even though item II matches the selector expression, it is not included in the results; only descendants are considered candidates for the match.
Unlike most of the tree traversal methods, the selector expression is required in a call to .find()
. If we need to retrieve all of the descendant elements, we can pass in the universal selector '*'
to accomplish this.
Selector context is implemented with the .find()
method;
therefore, $( "li.item-ii" ).find( "li" )
is equivalent to $( "li", "li.item-ii" )
.
As of jQuery 1.6, we can also filter the selection with a given jQuery collection or element. With the same nested list as above, if we start with:
1 |
|
And then pass this jQuery object to find:
1 |
|
This will return a jQuery collection which contains only the list elements that are descendants of item II.
Similarly, an element may also be passed to find:
1 2 |
|
The result of this call would be a red background on item 1.
Examples:
Starts with all paragraphs and searches for descendant span elements, same as $( "p span" )
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Demo:
A selection using a jQuery collection of all span tags. Only spans within p tags are changed to red while others are left blue.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Demo:
Add spans around each word then add a hover and italicize words with the letter t.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
|
Demo:
Содержание:
-
.find( selector )
- .find( selector )
- .find( element )
- Обсуждение
- Примеры
.find( selector )Возвращает: jQuery
Описание: Поиск потомков внутри каждого элемента в текущем наборе соотвествующих элементов с фильтрацией по селектору, объекту jQuery или элементу.
-
Добавлен в версии: 1.0.find( selector )
-
selector
Строка содержащая выражение селектора для получения соответсвующих элементов.
-
-
Добавлен в версии: 1.6.find( element )
-
element
Элемент или объект jQuery внутри которого будет производится поиск элементов.
-
Учитывая что объект jQuery представляет из себя набор DOM элементов, метод .find()
разрешает нам находить потомки элементов в DOM дереве и конструировать новый объект jQuery из найденных элементов. Методы .find()
и .children()
похожи, за исключением того, что последний проходит вниз по DOM дереву только на один уровень.
Первая сигнатура метода .find()
принимает выражение селектора того же типа что и функция $()
. Элементы будут фильтроваться путем проверки – соответстует ли данный элементы селектору.
Рассмотрим страницу на которой расположены вложенные списки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Если мы начнем с пункта II, мы можем найти элементы списка внутри него:
1 |
|
Результатом работы этого кода станет красный фон для элементов A, B, 1, 2, 3 и C. Даже если элемент II соответствует выражению селектора, он не включается в результаты, так как только потомки считаются кандидатами на соответствие.
В отличие от большинства методов обхода, метод .find()
требует обязательного выражения селектора. Если нам нужны все потомки, то мы можем указать универсальный селектор '*'
для этого.
Контекст селектора реализованн в методе .find()
, следовательно, $( "li.item-ii" ).find( "li" )
эквивалентно $( "li", "li.item-ii" )
.
Начиная с jQuery 1.6, вы также можете фильтровать выбор при помощи переданного объекта jQuery или элемента. С тем же списком описанным выше, если мы начнем с:
1 |
|
И затем передадим этот jQuery объект в find:
1 |
|
То это вернет jQuery коллекцию, которая содержит который содержит только элементы списка, являющиеся потомками элемента II.
Аналогично, фильтровать можно по элементу:
1 2 |
|
Результатом этого вызова будет красный фон у элемента 1.
Примеры использования
let’s say I have a markup like this:
<div id="foo">
...
<span id="moo">
...
</span>
...
</div>
and I want to select #moo.
why $('#foo').find('span')
works, but $('span', $('#foo'));
doesn’t ?
Pranay Rana
174k35 gold badges237 silver badges263 bronze badges
asked Apr 27, 2011 at 18:13
3
You can use any one these [starting from the fastest]
$("#moo") > $("#foo #moo") > $("div#foo span#moo") > $("#foo span") > $("#foo > #moo")
Take a look
answered Apr 27, 2011 at 18:50
Jishnu A PJishnu A P
14.1k8 gold badges40 silver badges50 bronze badges
0
Actually, $(‘#id’, this); would select #id at any descendant level, not just the immediate child. Try this instead:
$(this).children('#id');
or
$("#foo > #moo")
or
$("#foo > span")
answered Apr 27, 2011 at 18:15
Pranay RanaPranay Rana
174k35 gold badges237 silver badges263 bronze badges
2
You can use find
option to select an element inside another. For example, to find an element with id txtName in a particular div, you can use like
var name = $('#div1').find('#txtName').val();
answered Dec 4, 2017 at 13:13
Why not just use:
$("#foo span")
or
$("#foo > span")
$('span', $('#foo'));
works fine on my machine 😉
answered Apr 27, 2011 at 18:19
hunterhunter
62.1k19 gold badges113 silver badges113 bronze badges
1
Have a look here — to query a sub-element of an element:
$(document.getElementById('parentid')).find('div#' + divID + ' span.child');
answered Jul 7, 2014 at 16:46
CodyCody
9,6954 gold badges60 silver badges46 bronze badges
….but $(‘span’, $(‘#foo’)); doesn’t work?
This method is called as providing selector context.
In this you provide a second argument to the jQuery selector. It can be any css object string just like you would pass for direct selecting or a jQuery element.
eg.
$("span",".cont1").css("background", '#F00');
The above line will select all spans within the container having the class named cont1
.
DEMO
answered Aug 24, 2018 at 23:29
Mohd Abdul MujibMohd Abdul Mujib
12.9k8 gold badges62 silver badges88 bronze badges
1
You could do this:
if($('#THIS_DIV','#THIS_PARENT').length == 1) {
}
By specifying a context for the search (the second argument) we are basically saying “look for an element with an ID of #THIS_DIV
within an element with ID of #THIS_PARENT
“. This is the most succint way of doing it using jQuery.
We could also write it like this, using find
, if it makes more sense to you:
if($('#THIS_PARENT').find('#THIS_DIV').length == 1) {
}
Or like this, using parents
, if you want to search from the child upwards:
if($('#THIS_DIV').parents('#THIS_PARENT').length == 1) {
}
Any of these should work fine. The length
bit is necessary to make sure the length of the “search” is > 0. I would of course personally recommend you go with the first one as it’s the simplest.
Also, if you are referring to an element by ID it’s not necessary (although of course perfectly okay) to preface the selector with the tag name. As far as speed, though, it doesn’t really help as jQuery is going to use the native getElementById()
internally. Using the tag name is only important when selecting by class, as div.myclass
is much, much faster than .myclass
if only <div>
elements are going to have the particular class.
Осуществляет поиск элементов внутри уже выбранных элементов.
Метод имеет варианты использования и соответствующий синтаксис:
– ищет элементы, соответствующие заданному селектору, внутри выбранных элементов.
– осуществляет поиск элемента
1 |
element |
внутри выбранных элементов. Параметр
1 |
element |
задается в виде DOM-элемента.
– осуществляет поиск элементов внутри выбранных элементов, оставляя те, которые содержатся в заданном объекте jQuery.
Примеры использования.
- вернет все элементы
, находящиеся внутри div-элементов:
1
span
$('div').find('span')
- вернет все элементы с классом
, находящиеся внутри div-элементов:
1
.bigBlock
$('div').find('.bigBlock')
Вышеуказанные примеры хороши лишь в качестве демонстрации возможностей метода
.
Например, искать span-элементы, лежащие внутри div’ов правильнее будет так:
$('div span')
Метод
же удобно использовать, когда некоторые элементы уже найдены и необходимо осуществить поиск других элементов внутри уже найденных элементов:
// найдем все ul-элементы на странице
var $ulElements = $('ul');
// найдем li-элементы с классом .userBox внутри $ulElements
$ulElements.find('li.userBox');
// сокращенный вариант записи
var $ulElements = $('ul').find('li.userBox');
Так же
удобен для использования в цепочках методов:
$('ul') // найдем все ul-элементы на странице
.addClass('listElements') // добавим ul'ам класс .listElements
.find('li.userBox') // найдем li-элементы с классом .userBox внутри ul'ов
.remove(); // и удалим их
// сокращенный вариант записи
$('ul').addClass('listElements').find('li.userBox').remove();
Работа метода
схожа с методом
1 |
.children() |
, который осуществляет поиск подходящих дочерних элементов.
Отличие заключается в том, что
проводит поиск не только среди дочерних элементов, но и внутри них тоже (другими словами – поиск проходит на всех уровнях иерархии DOM, в то время как
1 |
.children() |
ищет только на одном уровне).
Внутри каждого ul-элемента найдем первый li-элемент и последний p-элемент:
// найдем и сохраним все ul-элементы
var $matched = $('ul');
// выделим их
$matched.addClass('matched');
// найдем внутри уже выбранных элементов все требуемые и выделим их, добавив класс .result
$matched.find('li:first, p:last').addClass('result');
// сокращенный вариант записи
var $matched = $('ul').addClass('matched').find('li:first, p:last').addClass('result');
Фильтрация элементов помощью .find()
Кроме поиска, .find() может осуществлять своеобразную фильтрацию.
var $span = $('span'); // создать переменную $span и поместить в нее результат выборки по элементам span
$('p').find($span).css('color','blue'); // найти все элементы p, среди этих найденных элементов найти все элементы span и расскрасить их
Материал статьи полностью основан на http://jquery.page2page.ru и не претендует на оригинальность.