2009-06-15 6 views
0

Meine erste Forschung ist leer ausgegangen und ich bin mir nicht sicher, ob das möglich ist. Ich suche nach einer Lösung, die direktes Javascript verwendet. Ich kann jQuery aufgrund von Einschränkungen des Geräts nicht verwenden. Grundsätzlich möchte ich ein Ereignis anfügen, wenn ein Element entfernt wird und eine Funktion zur Verfügung stellen.Gibt es eine Möglichkeit, vom DOM benachrichtigt zu werden, wenn ein Element entfernt wird?

[EDIT]
Wir machen die DOM-Manipulation über einen Funktionsaufruf. Im Moment durchqueren wir derzeit nicht den ganzen Baum, um jedes einzelne Element zu entfernen. Wir entfernen zum Beispiel nur den Elternteil. Ich hatte gehofft, eine Abkürzung zu schaffen, indem ich an ein Ereignis anschließe, aber ich schätze, ich muss den weiten Weg gehen und die zusätzliche Logik in der Funktion bereitstellen. Der Grund, warum ich das brauche, ist, dass wir Cleanup-Operationen auf dem DOM ausführen müssen, wenn bestimmte Elemente entfernt werden.

Im Moment ist die Priorität nur Opera-Unterstützung, aber ich würde gerne eine Cross-Browser-Lösung durchführen.

+0

Es wäre eine einfachere Frage zu beantworten, wenn Sie erklären, wie die Knoten entfernt werden können. –

+0

Interessiert es dich, den IE zufällig zu unterstützen? –

+0

Bearbeitete Frage, um die Browserkompatibilität zu berücksichtigen. –

Antwort

2

Wenn Sie an Cross-Browser-Unterstützung interessiert sind, ist "on Element removal" nicht an HTML 4 event, also denke ich, dass Sie hier Pech haben könnten. Ich denke jedoch, dass Sie etwas Glück haben würden, wenn Sie eine alternative Strategie anwenden würden: Da Sie das Entfernen vornehmen, beschränken die Möglichkeiten, wie das Element entfernt werden kann. Dann rufen Sie einfach dort den Callback statt in einem Event-Handler auf.

1

Die direkte Antwort ist nein. Die aktuellen DOM-Implementierungen bieten kein Ereignis, das Sie anhängen können, um nach DOM-Änderungen zu suchen.

Vielleicht könnten Sie zu Ihrer Frage hinzufügen, warum Sie dies benötigen, kann es Alternativen geben. Wenn beispielsweise das DOM-Element durch Code entfernt wird, könnte dieser Code so modifiziert werden, dass er an einem Beobachtermuster teilnimmt?

0

Ich würde gerne wissen, wie die Knoten entfernt werden, wenn Sie nicht derjenige sind, der es tut.

Wie schnell nach dem Entfernen müssen Sie wissen? Kannst du einfach überprüfen, ob es einmal in der Sekunde weg ist?

0

Ich bin kein DOM-Experte, aber könnten Sie die removeChild-Methode überschreiben?

Wenn es funktioniert, ist es keine perfekte Lösung, da die anderen Wege für ein DOM-Element weggehen (z. B. setting innerHTML auf einem seiner Vorfahren).

Sie können auch eine Kinderzahl beim Elternelement speichern. Dann vergleichen Sie diese Anzahl mit der tatsächlichen Anzahl der Kinder. Natürlich würde das Umfragen erfordern, kein Ereignis.

0

Ich bin nicht stark in Javascript, aber verspottete schnell den folgenden Code und es funktionierte in Firefox. Sie können sich glücklich schätzen, dass es in anderen Browsern funktioniert.

<ul id="main"> 
    <li id="e1">Item 1</li> 
    <li id="e2">Item 2</li> 
</ul> 

<script type="text/javascript"> 
var main = document.getElementById('main'); 
main.origRemoveChild = main.removeChild; 
main.removeChild = function(child) { 
    alert('Removing element ' + child.tagName + ' with id=' + child.id); 
    this.origRemoveChild(child); 
} 
var e1 = document.getElementById('e1'); 
main.removeChild(e1); 
</script> 

Da Sie Ihre Frage aktualisiert habe ich eine andere Lösung hier:

removeFromDOM(e) { 
    for (var i = 0; i < e.childNodes.length; ++i) { 
     var child = e.childNodes[i]; 
     removeFromDOM(child); 
     if (typeof child.onremove == 'function') { 
      child.onremove(); 
     } 
     e.removeChild(child); 
    } 
} 

Dies wird rekursiv alle verschachtelten Knoten löschen.Vor dem Löschen wird versucht, onremove Methode auszuführen ist vorhanden. Ich hoffe, das hilft.

+0

Danke, ich werde es versuchen. Ich bin möglicherweise in der Lage, unsere Methode remove zu ändern, um dies zu berücksichtigen. –

Verwandte Themen