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)); | |
|  | |
| } 
 |