code: function(element, iteratee, opt, _visited, _distance) {
  
          opt = opt || {};
          var visited = _visited || {};
          var distance = _distance || 0;
          if (iteratee(element, distance) === false) return;
          visited[element.id] = true;
  
          this.getNeighbors(element, opt).forEach(function(neighbor) {
              if (!visited[neighbor.id]) {
                  this.dfs(neighbor, iteratee, opt, visited, distance + 1);
              }
          }, this);
      }
docs: Depth-first search. If `opt.deep` is `true`, take into account embedded elements too. If `opt.inbound` is `true`, reverse the search direction (it's like reversing all the link directions). `iteratee` is a function of the form `function(element, distance) {}`. If `iteratee` explicitely returns `false`, the search stops.