<ul id="theList">
<li class="odd">Item 1</li>
<li class="even">Item 2</li>
<li class="odd">Item 3</li>
<li class="even">Item 4</li>
<li class="odd">Item 5</li>
<li class="even">Item 6</li>
<li class="odd">Item 7</li>
<li class="even">Item 8</li>
<li class="odd">Item 9</li>
<li class="even">Item 10</li>
<li class="odd">Item 11</li>
<li class="even">Item 12</li>
<li class="odd">Item 13</li>
<li class="even">Item 14</li>
<li class="odd">Item 15</li>
<li class="even">Item 16</li>
<li class="odd">Item 17</li>
<li class="even">Item 18</li>
<li class="odd">Item 19</li>
<li class="even">Item 20</li>
<li class="odd">Item 21</li>
<li class="even">Item 22</li>
<li class="odd">Item 23</li>
<li class="even">Item 24</li>
<li class="odd">Item 25</li>
<li class="even">Item 26</li>
<li class="odd">Item 27</li>
<li class="even">Item 28</li>
<li class="odd">Item 29</li>
<li class="even">Item 30</li>
</ul>
var els = $('.even');
var els = document.querySelectorAll('.even');
var els = document.getElementsByClassName('even');
var els = $('li.even');
var els = document.querySelectorAll('li.even');
--enable-precise-memory-info
flag.
Test case name | Result |
---|---|
jQuery | |
querySelectorAll | |
getElementsByClassName | |
jQuery: mixed selector | |
querySelectorAll: mixed selector |
Test name | Executions per second |
---|---|
jQuery | 0.0 Ops/sec |
querySelectorAll | 944032.5 Ops/sec |
getElementsByClassName | 4205283.5 Ops/sec |
jQuery: mixed selector | 0.0 Ops/sec |
querySelectorAll: mixed selector | 829439.6 Ops/sec |
Let's dive into the explanation of the benchmark.
Benchmark Definition
The benchmark measures the performance of three methods to retrieve elements identified by class name:
$
): A popular JavaScript library for DOM manipulation.querySelectorAll
: A standard JavaScript method for selecting elements based on a CSS selector.getElementsByClassName
: A standard JavaScript method for retrieving elements with a specific class name.Options Compared
The three methods are compared in two variants:
var els = $('.even');
: Retrieves all elements with the class "even" using a single selector.var els = $('li.even');
: Retrieves all <li>
elements with the class "even" using a mixed selector (element type and class name).querySelectorAll
and getElementsByClassName
, there are also two variants:var els = document.querySelectorAll('.even');
var els = document.querySelectorAll('li.even');
Pros and Cons
Here's a brief summary of the pros and cons for each method:
querySelectorAll
, especially for larger datasets.Other Considerations
When choosing a method, consider the following factors:
querySelectorAll
and getElementsByClassName
are usually sufficient.querySelectorAll
might perform better due to its ability to use index arithmetic and other optimizations.Alternative Methods
In addition to the above methods, there are other approaches for retrieving elements by class name:
getElementsByTagName
: Retrieves all elements with a specific tag name.[class="even"]
or [data-attribute="value"]
..even
, .odd
, or li.even
.These alternative methods might be more suitable for specific use cases, such as:
However, they may not always be faster or more efficient than the standard methods mentioned above.