code: function parser(el, attr) {
  	// empty input fallback to empty text node
  	if (!el) {
  		return createNode(document.createTextNode(''));
  	}
  
  	if (typeof el === 'string') {
  		if ( !('DOMParser' in window) ) {
  			throw new Error('DOMParser is not available, so parsing string to DOM node is not possible.');
  		}
  		domParser = domParser || new DOMParser();
  		var doc = domParser.parseFromString(el, 'text/html');
  
  		// most tags default to body
  		if (doc.body.firstChild) {
  			el = doc.getElementsByTagName('body')[0].firstChild;
  
  		// some tags, like script and style, default to head
  		} else if (doc.head.firstChild && (doc.head.firstChild.tagName !== 'TITLE' || doc.title)) {
  			el = doc.head.firstChild;
  
  		// special case for html comment, cdata, doctype
  		} else if (doc.firstChild && doc.firstChild.tagName !== 'HTML') {
  			el = doc.firstChild;
  
  		// other element, such as whitespace, or html/body/head tag, fallback to empty text node
  		} else {
  			el = document.createTextNode('');
  		}
  	}
  
  	if (typeof el !== 'object' || !el || !el.nodeType) {
  		throw new Error('invalid dom node', el);
  	}
  
  	return createNode(el, attr);
  }
docs: DOM/html string to vdom parser
  
  @param   Mixed   el    DOM element or html string
  @param   String  attr  Attribute name that contains vdom key
  @return  Object        VNode or VText