code: function (options, iterator) {
          _.isFunction(options) && (iterator = options, options = {});
          if (!_.isFunction(iterator) || !_.isObject(options)) { return; }
  
          var parent = this.parent(),
              grandparent = parent && _.isFunction(parent.parent) && parent.parent();
  
          while (parent && (grandparent || options.withRoot)) {
              iterator(parent);
              parent = grandparent;
              grandparent = grandparent && _.isFunction(grandparent.parent) && grandparent.parent();
          }
      }
docs: Invokes the given iterator for every parent in the parent chain of the given element.
  
  @param {?Object|Boolean} [options={}] - A set of options for the parent chain traversal.
  @param {?Boolean} [options.withRoot=false] - Set to true to include the collection object as well.
  @param {Function} iterator - The function to call for every parent in the ancestry chain.
  @todo Cache the results