Let’s say, I have a list of birds on my web page. I am showing the list using <ul> and <li> tags. The list is inside a <div> element. See the image.
Each <ul> tag has unique id. Since, I have different types of birds, the ul’s id have specific texts, followed a number, to differentiate between different types of birds.
For example, if the bird is of type hawk, the id of the <ul> will have something like, hk1, followed by hk2 etc. There are other types. Now, I want to extract or get all the elements (in my case <ul>) that has the text (or is prefixed) with hk.
There are many ways you can actually do this. I am sharing two different examples here. The first example uses the .indexOf() method and second example uses the .querySelectorAll() method.
1) Using .indexOf() Method
<!DOCTYPE html> <html> <body> <style> ul { list-style-type: none; margin: 0; padding: 0; clear: both; } ul li { padding: 5px 3px; border: 1px solid #CCC; font: 17px Calibri; width: 150px; display: inline-table; } </style> <p>Click the button to find the Hawks from the list of Birds!</p> <div id="birds"> <ul id='hk1'><li>Bald Eagle</li><li>Hawk</li></ul> <ul id='sp1'><li>Bell's Sparrow</li><li>Sparrow</li></ul> <ul id='hk2'><li>American Kestrel</li><li>Hawk</li></ul> <ul id='wp1'><li>Hairy Woodpecker</li><li>Woodpecker</li></ul> <ul id='hk3'><li>Black Vulture</li><li>Hawk</li></ul> </div> <p> <input type="button" id="check" onclick="findHawks()" value="Click it" /> </p> <p id="result"></p> </body> <script> function findHawks() { var theDiv = document.getElementById('birds').children; for (var i = 0; i < theDiv.length; i++) { if (theDiv[i].tagName == 'UL') { // Check if the element is <ul>. // Find the text "hk" using "indexOf()" method. if (theDiv[i].id.indexOf('hk') == 0) { // Change "hk" to "sp" to get all the Sparrows from the list. var li = theDiv[i].children; // Show the names of the Birds of type Hawk. result.innerHTML = result.innerHTML + '<br />' + li[0].innerHTML; } } } } </script> </html>
The script is simple. I am using the indexOf() method to check if a string or the id of the element has the text hk. The indexOf() method returns 0 (zero) if it finds a match.
👉 How to check if a DIV element contains P elements using JavaScript .contains() method
In the beginning of the script, I am getting all the child elements inside the <div> element using the “children” property.
var theDiv = document.getElementById('birds').children;
The <div> element, as I said, can have many different elements. So, I need to check the type of element the <div> has. I am running a loop and checking if the element is of type UL, using the tagName property.
if (theDiv[i].tagName == 'UL') { }
The next if condition checks if the element’s id has a text that starts with hk. That’s the element I want from the list, and shows the result.
if (theDiv[i].id.indexOf('hk') == 0) { }
2) Using .querySelectorAll() Method
In this example I am using the same markup that I have used in the above example.
The querySelectorAll() method returns a collection of child elements from its parent element. The parent element, in our case, is a <div>.
<!DOCTYPE html> <html> <body> <style> ul { list-style-type: none; margin: 0; padding: 0; clear: both; } ul li { padding: 5px 3px; border: 1px solid #CCC; font: 17px Calibri; width: 150px; display: inline-table; } </style> <p>Example using <b>querySelectorAll()</b> method. <br />Click the button to find the Hawks from the list of Birds!</p> <div id="birds"> <ul id='hk1'><li>Bald Eagle</li><li>Hawk</li></ul> <ul id='sp1'><li>Bell's Sparrow</li><li>Sparrow</li></ul> <ul id='hk2'><li>American Kestrel</li><li>Hawk</li></ul> <ul id='wp1'><li>Hairy Woodpecker</li><li>Woodpecker</li></ul> <ul id='hk3'><li>Black Vulture</li><li>Hawk</li></ul> </div> <p> <input type="button" id="check" onclick="findHawks()" value="Click it" /> </p> <p id="result"></p> </body> <script> function findHawks() { var t = document.querySelectorAll('div ul[id^="hk"]'); for (var i = 0; i < t.length; i++) { // Show the names of the Birds. result.innerHTML = result.innerHTML + '<br />' + (t[i].children[0].innerHTML); t[i].children[0].style.color = '#F00'; } } </script> </html>
Look at the parameter values of the querySelectAll() method. Since, I want to extract elements that have ids with a specific text, I have defined the selector ul with id that matches the text hk.
document.querySelectorAll ('div ul[id^="hk"]')
You can also use the > (greater than sign) after the div selector. Like this ...
document.querySelectorAll ('div > ul[id^="hk"]')
Well, that’s it. You can use both the methods that I have explained in this post.