whole_func_string: 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);
        }
      });
    }
func_code_string: 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);
        }
      });
    }
func_documentation_string: visits a set of nodes to be parsed and recursively visits its children currentItem, if provided, contains the current microdata context