151 lines
5.1 KiB
JavaScript
151 lines
5.1 KiB
JavaScript
// Source: https://developer.mozilla.org/en-US/docs/Web/API/NodeList/forEach
|
|
if (window.NodeList && !NodeList.prototype.forEach) {
|
|
NodeList.prototype.forEach = function(callback, thisArg) {
|
|
thisArg = thisArg || window;
|
|
for (var i = 0; i < this.length; i++) {
|
|
callback.call(thisArg, this[i], i, this);
|
|
}
|
|
};
|
|
}
|
|
|
|
// Source: https://developer.mozilla.org/en-US/docs/Web/API/Element/matches
|
|
if (!Element.prototype.matches) {
|
|
Element.prototype.matches =
|
|
Element.prototype.matchesSelector ||
|
|
Element.prototype.mozMatchesSelector ||
|
|
Element.prototype.msMatchesSelector ||
|
|
Element.prototype.oMatchesSelector ||
|
|
Element.prototype.webkitMatchesSelector ||
|
|
function(s) {
|
|
var matches = (
|
|
this.document || this.ownerDocument
|
|
).querySelectorAll(s),
|
|
i = matches.length;
|
|
while (--i >= 0 && matches.item(i) !== this) {}
|
|
return i > -1;
|
|
};
|
|
}
|
|
|
|
// Source: https://developer.mozilla.org/en-US/docs/Web/API/Element/closest
|
|
if (!Element.prototype.matches) {
|
|
Element.prototype.matches =
|
|
Element.prototype.msMatchesSelector ||
|
|
Element.prototype.webkitMatchesSelector;
|
|
}
|
|
|
|
if (!Element.prototype.closest) {
|
|
Element.prototype.closest = function(s) {
|
|
var el = this;
|
|
|
|
do {
|
|
if (el.matches(s)) return el;
|
|
el = el.parentElement || el.parentNode;
|
|
} while (el !== null && el.nodeType === 1);
|
|
return null;
|
|
};
|
|
}
|
|
|
|
// Source: https://github.com/jserz/js_piece/blob/master/DOM/ParentNode/prepend()/prepend().md
|
|
(function(arr) {
|
|
arr.forEach(function(item) {
|
|
if (item.hasOwnProperty('prepend')) {
|
|
return;
|
|
}
|
|
Object.defineProperty(item, 'prepend', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: true,
|
|
value: function prepend() {
|
|
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.insertBefore(docFrag, this.firstChild);
|
|
}
|
|
});
|
|
});
|
|
})([Element.prototype, Document.prototype, DocumentFragment.prototype]);
|
|
|
|
// 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]);
|
|
|
|
// Source: https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/before()/before().md
|
|
(function(arr) {
|
|
arr.forEach(function(item) {
|
|
if (item.hasOwnProperty('before')) {
|
|
return;
|
|
}
|
|
Object.defineProperty(item, 'before', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: true,
|
|
value: function before() {
|
|
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.parentNode.insertBefore(docFrag, this);
|
|
}
|
|
});
|
|
});
|
|
})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);
|
|
|
|
// Source: https://github.com/jserz/js_piece/blob/master/DOM/ChildNode/remove()/remove().md
|
|
(function(arr) {
|
|
arr.forEach(function(item) {
|
|
if (item.hasOwnProperty('remove')) {
|
|
return;
|
|
}
|
|
Object.defineProperty(item, 'remove', {
|
|
configurable: true,
|
|
enumerable: true,
|
|
writable: true,
|
|
value: function remove() {
|
|
if (this.parentNode !== null) this.parentNode.removeChild(this);
|
|
}
|
|
});
|
|
});
|
|
})([Element.prototype, CharacterData.prototype, DocumentType.prototype]);
|