visits a set of nodes to be parsed and recursively visits its children currentItem, if provided, contains the current microdata context
function walkNodes ($nodes, currentItem) {
    $nodes.each(function (i, node) {
      var $node = $(node);
      var props = splitUnique($node.attr('itemprop'));

      if (props && currentItem) {
        var value = null;
        if ($node.is('[itemscope]')) {
          value = parseItem(node, currentItem);
        } else {
          value = parsePropertyValue(node);
          walkNodes($node.children(), currentItem);
        }
        currentItem.addProperties(props, value);
      } else if ($node.is('[itemscope]') && !$node.is('[itemprop]')) {
        var newItem = parseItem(node, currentItem);
        if (newItem !== Item.ERROR) {
          items.push(newItem);
        }
      } else {
        walkNodes($node.children(), currentItem);
      }
    });
  }