You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							75 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							75 lines
						
					
					
						
							1.9 KiB
						
					
					
				/* | 
						|
 * outerHTML.js | 
						|
 *   Cross-browser full HTMLElement.outerHTML implementation. | 
						|
 * | 
						|
 * 2011-11-14 | 
						|
 * | 
						|
 * By Eli Grey, http://eligrey.com | 
						|
 * Public Domain. | 
						|
 * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. | 
						|
 */ | 
						|
 | 
						|
if (typeof document !== "undefined" && !("outerHTML" in document.createElementNS("http://www.w3.org/1999/xhtml", "_"))) { | 
						|
 | 
						|
(function(view) { | 
						|
"use strict"; | 
						|
 | 
						|
var | 
						|
	  container = document.createElementNS("http://www.w3.org/1999/xhtml", "_") | 
						|
	, elem_proto = (view.HTMLElement || view.Element).prototype | 
						|
	, xml_serializer = new XMLSerializer | 
						|
	, outerHTML_getter = function() { | 
						|
		var | 
						|
			  node = this | 
						|
			, html | 
						|
		; | 
						|
		if (document.xmlVersion) { | 
						|
			return xml_serializer.serializeToString(node); | 
						|
		} else { | 
						|
			container.appendChild(node.cloneNode(false)); | 
						|
			html = container.innerHTML.replace("><", ">" + node.innerHTML + "<"); | 
						|
			container.innerHTML = ""; | 
						|
			return html; | 
						|
		} | 
						|
	} | 
						|
	, outerHTML_setter = function(html) { | 
						|
		var | 
						|
			  node = this | 
						|
			, parent = node.parentNode | 
						|
			, child | 
						|
		; | 
						|
		if (parent === null) { | 
						|
			DOMException.code = DOMException.NOT_FOUND_ERR; | 
						|
			throw DOMException; | 
						|
		} | 
						|
		container.innerHTML = html; | 
						|
		while ((child = container.firstChild)) { | 
						|
			parent.insertBefore(child, node); | 
						|
		} | 
						|
		parent.removeChild(node); | 
						|
	} | 
						|
; | 
						|
 | 
						|
if (Object.defineProperty) { | 
						|
	var outerHTML_prop_desc = { | 
						|
		  get: outerHTML_getter | 
						|
		, set: outerHTML_setter | 
						|
		, enumerable: true | 
						|
		, configurable: true | 
						|
	}; | 
						|
	try { | 
						|
		Object.defineProperty(elem_proto, "outerHTML", outerHTML_prop_desc); | 
						|
	} catch (ex) { // IE 8 doesn't support enumerable:true | 
						|
		if (ex.number === -0x7FF5EC54) { | 
						|
			outerHTML_prop_desc.enumerable = false; | 
						|
			Object.defineProperty(elem_proto, "outerHTML", outerHTML_prop_desc); | 
						|
		} | 
						|
	} | 
						|
} else if (Object.prototype.__defineGetter__ && Object.prototype.__defineSetter__) { | 
						|
	elem_proto.__defineGetter__("outerHTML", outerHTML_getter); | 
						|
	elem_proto.__defineSetter__("outerHTML", outerHTML_setter); | 
						|
} | 
						|
 | 
						|
}(self)); | 
						|
 | 
						|
} 
 |