Kidd Hustle
3 years ago
committed by
GitHub
7 changed files with 107 additions and 2 deletions
@ -0,0 +1,75 @@
|
||||
/* |
||||
* 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)); |
||||
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
if (window.HTMLOutputElement === undefined) { |
||||
Object.defineProperty(HTMLUnknownElement.prototype, 'value', { |
||||
get: function () { |
||||
if (this.tagName === 'OUTPUT') { |
||||
return this.textContent; |
||||
} |
||||
}, |
||||
set: function (newValue) { |
||||
if (this.tagName === 'OUTPUT') { |
||||
this.textContent = newValue; |
||||
} |
||||
} |
||||
}); |
||||
} |
Loading…
Reference in new issue