Practice Set, Week 8, DOM Traversal

by somya_kashyap3

HTML

<h3>Practice Set, Week 8, DOM Traversal</h3>

<p>Code is provided here that will traverse the DOM. Your job is to add some code that will take some action at each node.</p>
<p>Your task is to find every element that has the word "text" in it, and add the className "searchHit" to their parent elements.</p>
<p>The steps to do this will look something like this:</p>
<ol>
    <li>At each node, determine if it's a text node</li>
    <li>If so, find out if the target string is within the text content of the node.</li>
    <li>If so, get the parent node and set its class attribute to "searchHit"</li>
</ol>
<p>If you've got it, each element containing the word 'text' will be highlighted in yellow. </p>

CSS

.searchHit {
    background-color:yellow;
}

JavaScript

function traverse(el, str) {
    // Your code can go here - acting on the way down 
    //   the tree towards the branches
    if(el.nodeName == "#text"){
    	var textContent = el.textContent;
      // to remove single and double from the text content of the node like "text" or 'text'
      //var t = textContent.replace(/["']/g, "");
      if(textContent.includes("str.valueOf")){
      	
      }
      var array = textContent.split(" ");
      for(var i = 0; i< array.length; i++){
      	if(str.localeCompare(array[i]) == 0){
        	el.parentNode.setAttribute("class", "searchHit");
        }
      }
    }
    
    for (var i = 0; i < el.childNodes.length; i++) {
        traverse(el.childNodes[i], str);
    }
    // Or your code can go here - acting on the way back up 
    //  the tree towards the root
    
    
}

traverse(document.documentElement, 'text');