67 lines
2.3 KiB
TypeScript
67 lines
2.3 KiB
TypeScript
/* IE11 and safari */
|
|
if(Element.prototype.remove === undefined) {
|
|
Object.defineProperty(Element.prototype, "remove", {
|
|
enumerable: false,
|
|
configurable: false,
|
|
writable: false,
|
|
value: function(){
|
|
this.parentElement.removeChild(this);
|
|
}
|
|
});
|
|
}
|
|
|
|
/* IE11 */
|
|
function ReplaceWithPolyfill() {
|
|
let parent = this.parentNode, i = arguments.length, currentNode;
|
|
if (!parent) return;
|
|
if (!i) { parent.removeChild(this); }
|
|
while (i--) { // i-- decrements i and returns the value of i before the decrement
|
|
currentNode = arguments[i];
|
|
if (typeof currentNode !== 'object'){
|
|
currentNode = this.ownerDocument.createTextNode(currentNode);
|
|
} else if (currentNode.parentNode){
|
|
currentNode.parentNode.removeChild(currentNode);
|
|
}
|
|
// the value of "i" below is after the decrement
|
|
if (!i) // if currentNode is the first argument (currentNode === arguments[0])
|
|
parent.replaceChild(currentNode, this);
|
|
else // if currentNode isn't the first
|
|
parent.insertBefore(currentNode, this.nextSibling);
|
|
}
|
|
}
|
|
if (!Element.prototype.replaceWith) {
|
|
Element.prototype.replaceWith = ReplaceWithPolyfill;
|
|
}
|
|
|
|
if (!CharacterData.prototype.replaceWith) {
|
|
CharacterData.prototype.replaceWith = ReplaceWithPolyfill;
|
|
}
|
|
|
|
if (!DocumentType.prototype.replaceWith) {
|
|
DocumentType.prototype.replaceWith = ReplaceWithPolyfill;
|
|
}
|
|
|
|
// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/append()/append().md
|
|
(function (arr) {
|
|
arr.forEach(function (item) {
|
|
if (item.hasOwnProperty('append')) {
|
|
return;
|
|
}
|
|
Object.defineProperty(item, 'append', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: true,
|
|
value: function append() {
|
|
var argArr = Array.prototype.slice.call(arguments),
|
|
docFrag = document.createDocumentFragment();
|
|
|
|
argArr.forEach(function (argItem) {
|
|
var isNode = argItem instanceof Node;
|
|
docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));
|
|
});
|
|
|
|
this.appendChild(docFrag);
|
|
}
|
|
});
|
|
});
|
|
})([Element.prototype, Document.prototype, DocumentFragment.prototype]); |