console
(() => {
function callback(mutationsList) {
const array = [];
for (let i = 0; i < mutationsList.length; i++) {
const nodes = mutationsList[i].addedNodes;
for (var j = 0; j < nodes.length; j++) {
const node = nodes[j];
if ("tagName" in node) {
array.push(node);
}
}
}
if (array.length > 0) {
oncreated(array);
}
};
window.addEventListener("load", function () {
const observer = new MutationObserver(callback);
observer.observe(document, { childList: true, subtree: true });
oncreated(document.children);
setInterval(() => callback(observer.takeRecords()), 100);
});
function dispatchByCode(elem, event, code) {
try {
new Function("event", code).apply(elem, [event]);
} catch (e) {
console.error(e);
}
}
Element.prototype.created = function () {
const event = new Event('created');
dispatch(this, event);
}
function dispatch(elem, event) {
const eventType = "on" + event.type;
if (!(eventType in elem.__proto__)) {
const code = elem.getAttribute(eventType);
if (code) {
dispatchByCode(elem, event, code);
}
}
elem.dispatchEvent(event);
}
function oncreated(elements, hookeds) {
if (hookeds == null) {
hookeds = new Set();
oncreated(elements, hookeds);
hookeds = Array.from(hookeds);
while (hookeds.length > 0) {
const topN = hookeds.splice(0, 1000);
setTimeout(() => topN.forEach(x => x.created()));
}
}
for (let i = 0; i < elements.length; i++) {
const element = elements[i];
if (isHooking(element)) {
hookeds.add(element);
}
if (element.childElementCount > 0) {
oncreated(element.children, hookeds);
}
}
}
function isHooking(element) {
return true;
}
})();
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="OnCreated.js"></script>
</head>
<body>
<form action="" id="from">
<input id="a" type="text" autocomplete="off"> <br />
<input id="b" type="text"> <br />
<input id="c" type="text"> <br />
<input id="d" type="text"> <br />
<input id="e" type="text"> <br />
</form>
<button onclick='document.body.appendChild(document.createElement("input"))'>动态添加元素</button>
<script>
window.addEventListener("created", function (e) {
console.log("window.addEventListener >> ", `${e.target.tagName}[${e.target.id}]`);
}, true);
</script>
</body>
</html>