Ich bin ein JavaScript-Modul zu entwickeln, die nichts über die Umgebung kennt, in dem sie verwendet werden inHaben Sie einen Verweis auf ein Element, wie erkennt man, sobald es an das Dokument angehängt wurde? .
Und technisch gesehen, will ich die nächste Funktion implementieren:
onceAppended(element, callback);
element
ist ein HTMLElement
und das übergeordnete Element dieses Elements kann während der Modulinitialisierung unbekannt sein. callback
ist eine Funktion, die einmal ausgelöst werden muss, sobald auf der Seite element
erscheint.
Callback muss sofort aufgerufen werden, wenn das Element an das Dokument angehängt wird. Falls element
noch nicht angehängt ist, löst die Funktion callback
aus, sobald element
im Dokument erscheint.
Das Problem ist, können wir erkennen element
Ereignis anhängen mit DOMNodeInserted
Mutationsereignis. Aber Mutationsereignisse sind jetzt deprecated. Und es scheint, dass MutationObserver
diese Aufgabe nicht bewältigen kann, oder?
Hier ist mein Code-Schnipsel:
function onceAppended (element, callback) {
let el = element,
listener;
while (el.parentNode)
el = el.parentNode;
if (el instanceof Document) {
callback();
return;
}
if (typeof MutationObserver === "undefined") { // use deprecated method
element.addEventListener("DOMNodeInserted", listener = (ev) => {
if (ev.path.length > 1 && ev.path[ev.length - 2] instanceof Document) {
element.removeEventListener("DOMNodeInserted", listener);
callback();
}
}, false);
return;
}
// Can't MutationObserver detect append event for the case?
}
Sie für jede Hilfe zu diesem Thema Vielen Dank im Voraus!
@wOxxOm Könnten Sie bitte meine Funktion vervollständigen, falls Sie das Thema kennen? Ich habe versucht, dies mit MutationObserver zu implementieren, und habe keine Ergebnisse erhalten. – ZitRo
Ich sehe nicht, warum MutationObserver diese Aufgabe nicht bewältigen kann. Was hast du probiert? Ich denke, du musst den Beobachter anhängen, um jeden hinzugefügten Knoten zu dokumentieren und zu überprüfen. Es wird jedoch sehr ineffektiv sein. Vielleicht können Sie 'appendChild',' replaceChild' und andere relevante Funktionen in den Prototypen von HTMLElement und Node überschreiben. – wOxxOm
Siehe auch [Alternative zu DOMNodeInserted] (http://StackOverflow.com/a/10343915) – wOxxOm