jQuery not() Method: DOM Traversal Explained
The jQuery not() method is a DOM traversal and filtering
tool that removes specific elements from a set of matched elements. This
article explains how the not() method operates, its syntax,
the different arguments it accepts, and how it simplifies DOM
manipulation by filtering out unwanted nodes from your selection.
What is the jQuery not() Method?
The not() method constructs a new jQuery object from a
subset of the matching elements, excluding any element that matches the
specified criteria. In essence, it acts as the direct opposite of
jQuery's .filter() method. Instead of selecting what you
want to keep, you define what you want to discard.
Basic Syntax
The basic syntax for the not() method is:
$(selector).not(criteria, function(index))The method accepts a single argument representing the criteria for removal:
- Selector Expression: A string containing a CSS
selector (e.g.,
".highlight","#main", or":disabled"). - DOM Element or Array of Elements: Direct references to one or more DOM elements to remove from the collection.
- jQuery Object: An existing jQuery object containing elements to be excluded.
- Function: A testing function that runs against each
element in the set; returning
trueexcludes that element.
How it Traverses and Filters the DOM
When you run an initial jQuery query, such as $('p'),
jQuery builds an internal array-like object containing references to all
matching <p> elements in the document.
When you chain .not(), jQuery iterates through that
existing list and evaluates each element against the condition passed
into not(). Any element that matches the argument is
excluded from the new collection returned by the method. The original
DOM structure is completely untouched; only the active jQuery selection
in memory changes.
Example: Filtering by Class Selector
// Selects all <li> elements except those with the class 'disabled'
$('li').not('.disabled').css('color', 'blue');In this scenario, jQuery finds all <li> tags,
checks each one for the .disabled class, strips out the
matches, and applies the CSS rule only to the remaining list items.
Example: Filtering with a Function
You can pass a function to create more dynamic or complex exclusion logic:
$('div').not(function(index) {
return $(this).children('span').length > 0;
}).addClass('no-spans');Here, the function checks each <div>. If a
<div> contains a <span> child, the
function returns true, and jQuery excludes that
<div> from the final selection.
Difference Between .not() and the :not() Selector
While .not() and the CSS :not()
pseudo-class achieve similar outcomes, their usage contexts differ:
:not()Selector:$('li:not(.active)')filters elements during the initial query execution..not()Method:$('li').not('.active')filters elements after an initial selection has already been created.
Using the .not() method provides greater flexibility
when you are dealing with pre-existing jQuery objects, passing dynamic
DOM references, or executing complex exclusion functions that cannot be
expressed with standard CSS selectors.