jQuery Traversing: Filtering
Sometimes a selector finds more elements than you need. The filtering methods help to narrow the selection.
<ul id="list">
<li class="item">Apple</li>
<li class="item hot">Banana</li>
<li class="item">Cherry</li>
<li class="item hot">Date</li>
<li class="item">Elderberry</li>
</ul>
| Method | Meaning |
|---|---|
.first() / .last() | The first or the last element |
.eq(n) | The element at the index n (starts from 0, negative counts from the end) |
.filter(sel) | Keeps only the elements which match |
.not(sel) | Removes the elements which match |
.has(sel) | Keeps the elements which have a matching descendant |
.is(sel) | Returns true if at least one element matches |
.slice(a, b) | A part of the selection, from index a up to (not including) b |
var text = function ($els) { return $els.map(function () { return $(this).text(); }).get().join(', '); };
console.log('first: ' + text($('.item').first()));
console.log('last: ' + text($('.item').last()));
console.log('eq(2): ' + text($('.item').eq(2)));
console.log('eq(-1): ' + text($('.item').eq(-1)));
console.log('filter: ' + text($('.item').filter('.hot')));
console.log('not: ' + text($('.item').not('.hot')));
console.log('slice: ' + text($('.item').slice(1, 3)));
console.log('is: ' + $('.item').first().is('.hot'));
Console output
first: Apple
last: Elderberry
eq(2): Cherry
eq(-1): Elderberry
filter: Banana, Date
not: Apple, Cherry, Elderberry
slice: Banana, Cherry
is: false
filter() with a function
You can give a function that returns true for the elements to keep.
var $long = $('.item').filter(function (index) {
return $(this).text().length > 5;
});
console.log($long.length);
console.log($long.eq(0).text());
Console output
3
Banana
has()
<div class="card"><p>Text only</p></div>
<div class="card"><p>With <b>bold</b></p></div>
console.log($('.card').has('b').length);
console.log($('.card').has('b').text());
Console output
1
With bold
add() to join selections
<h2>Title</h2>
<p>Text</p>
<span>Extra</span>
var $all = $('h2').add('p').add('span');
console.log($all.length);
Console output
3
Filtering after another traversal
You can use the filters at any point in a chain, for example $('li').filter('.hot').last().addClass('top').
Note:
.is() is the best method for a condition in an if. For example: if ($(this).is(':checked')) { ... }. Next: jQuery each() and map().
Congratulations! Chapter Finished. Learn more about the similar topics:
| Exercises & Assignments |
|---|
| No Content Found. |
| Interview Questions & Answers |
|---|
| No Content Found. |