I am having hard time fixing my recursive function, which is a simplified tool for to scan DOM items and return matching element when found somewhere within document.
find: function(selector, element) {
if(selector !== undefined) {
if(element === undefined) {
element = this.e;
}
var elements = element.childNodes;
for(var i = 0; i < elements.length; i++) {
if(elements[i].nodeType === 1) {
console.log(elements[i]);
if(this.has_class(selector, elements[i]) === true) {
console.log('YAY, found it', elements[i]);
return elements[i];
} else {
if(elements[i].childNodes.length > 0) {
this.find(selector, elements[i]);
}
}
}
}
}
return false;
}
So the function should scan through children (and possibly their children) of given DOM element and return found element, otherwise go deeper and try again.
This is debuggable DEMO.
As you can see in logs, it triggered console.log('found'); but it did not leave function returning it, but continue and eventually returned false (as of not found). How can it be fixed?
var tools = {
e: document.querySelector('.breadcrumbs'),
has_class: function(name, element) {
if (element.className === name) {
return true;
}
return false;
},
find: function(selector, element) {
if (selector !== undefined) {
if (element === undefined) {
element = this.e;
}
var elements = element.childNodes;
for (var i = 0; i < elements.length; i++) {
if (elements[i].nodeType === 1) {
console.log(elements[i]);
if (this.has_class(selector, elements[i]) === true) {
console.log('YAY, found it', elements[i]);
return elements[i];
} else {
if (elements[i].childNodes.length > 0) {
this.find(selector, elements[i]);
}
}
}
}
}
return false;
}
};
console.log(tools.find('test'));
<div class="breadcrumbs" data-active="true">
<div class="bc_navigation" onclick="events.bc_toggle(event, this);">
<span class="bc_arrow"></span>
</div>
<div class="bc_content">
<div class="bc_wrapper">
<div class="step">
<span class="dot"></span><a onclick="events.go_home(event, this);">Landing</a>
</div>
<div class="step">
<span class="dot"></span><a href="#prematch[prematch-sport][1|0|0|0|0]">Soccer</a>
</div>
<div class="step">
<span class="dot"></span><a href="#prematch[prematch-group][1|4|0|0|0]">International</a>
</div>
<div class="step">
<span class="dot"></span><a class="test" href="#prematch[prematch-event][1|4|16|10|0]">Int - World Cup</a>
</div>
<div class="step">
<span class="dot"></span><a>Russia - Saudi Arabia</a>
</div>
</div>
</div>
</div>