code: function updateClassesRead(treeNodes, dontMarkAsDone) {
  	var hasChanges = false;
  	var i, node, j, query;
  	for (i = 0; i < treeNodes.length; i++) {
  		node = treeNodes[i];
  		if (!node._done) {
  			for (j = 0; j < node._queries.length; j++) {
  				query = node._queries[j];
  				var queryMatches = evaluateQuery(node._element.parentNode, query);
  				if (queryMatches !== hasQuery(node._element, query)) {
  					node._changes.push([queryMatches, query]);
  				}
  			}
  			node._done = !dontMarkAsDone;
  		}
  		hasChanges = updateClassesRead(node._children, dontMarkAsDone || node._changes.length)
  			|| node._changes.length
  			|| hasChanges;
  	}
  	return hasChanges;
  }
docs: Update classes read step
  
  @param  {Array.<{_element: Element, _children: array, _queries: array, _changes: array, _done: boolean}>} treeNodes
  @param  {boolean}                                                                                         dontMarkAsDone
  @return {boolean} True if changes were found