devian: Auf Element im neugeladenen HTML Code (ajax) mit jquery zugreife

Hallo liebe Community,
ich habe mal wieder ein kleines Problem andem ich, auch nach stundenlangen googlen, nicht vorbei komme. Es geht um Folgendes. Ich drücke es einmal einfach und einmal kompliziert aus, damit ihr auch genaus wisst was ich meine.

Einfach: Ich hänge ein atribut mit $(this).attr("data-slide","test") an ein objekt. Und versuche es danach mit $(this).attr("data-slide","test"); wieder zu finden. Jetzt werden wahrscheinlich einige sagen, warum willst du das so machen? Das geht doch auch einfacher... nun gut hier das was ich vorhabe komplizierter ausgedrückt:

Ich habe folgenden Beispiel HTML Code:

  
<div id="urgroßelternbox">  
    <div id="großelternbox1">  
          <div id="elterbox1">Inhalt</div>  
          <div id="elterbox2">Inhalt</div>  
          <div id="elterbox3">Inhalt</div>  
    </div>  
    <div id="großelternbox2">Unhalt</div>  
</div>  
  

Nun habe ich ein tool geschrieben, welches diese div boxen markieren kann, klicke ich dann auf die jeweils gerade ausgewählte box wird der Inhalt gelöscht. Also wenn ich auf die urgroßelternbox klicke verschwindet ihr ganzer Inhalt. Meine Idee war nun eine zurück Funktion zu machen. Daher speicher ich jeden löschklick in einem array zusammen mit dem gelöschten Inhalt und das objekt, dessen boxinhalt (innerHTML) ich gelöscht habe.

Bei den elternboxen funktioniert das auch, dort kann ich die erste zweite und dritte box nacheinander löschen und sie wieder zurückholen! Allerdings nur wenn ich, nicht wie oben mit einem Attribut arbeite, sondern das objekt selbst in einer variable schreibe und anspreche.

Lösche ich nun aber zuerst eine elternbox und danach eine groß- oder urgroßelternbox, so geht zwar einmal zurück aber nicht zweimal. Ist ja auch logisch; beim ersten mal zurück füge ich den content aus dem gespeicherten Array einfach an dem entsprechenden Objekt wieder ein. Dieser Content, den ich mit innerhtml eingefügt habe, ist nun aber natürlich nicht vom dom erfasst und somit kommt er nicht weiter.

Meine Idee war es daher vor dem löschen jeder box ein spezielles Attribut zuzuschreiben. Wenn ich dann den Inhalt der Elternbox1 lösche, erhält sie das Löschatribut1. Selbst wenn ich danach die urgroßeltern lösche und den Inhalt später wieder einfügen will, so ist das Löschatribut immer noch vorhanden...

allerdings kann ich nicht mit jquery über find() oder ähnlichem drauf zugreifen.
Ich hoffe ihr versteht meine frage :)

  1. Hallo,

    Ich hoffe ihr versteht meine frage :)

    Leider nein.

    Ich verstehe, was du vorhast, verstehe aber deinen Lösungsansatz nicht. Ich vermute, hier liegt in erster Linie ein algorithmisches Problem vor, und in zweiter Linie ein Implementierungsproblem. Den Algorithmus kannst du auf dem Reißbrett entwerfen, dieser hat mit konkreten jQuery-Problemen, mit Ajax oder nicht erst einmal wenig zu tun.

    Soweit ich es verstehe: Du willst beim Löschen eine Art Parent-ID vergeben und mitspeichern, damit du beim Wiederherstellen eine Referenz hast, bei der du den Inhalt wieder einhängen kannst. Korrekt? Das erscheint mir logisch, wenn auch verkürzt. Alleinig die Parent-ID ist zum korrekten Wiederherstellen nicht hinrechend, es müsste noch eine Geschwister-Referenz geben.

    So etwas ist natürlich möglich; letztlich arbeitet jQuery nicht anders, indem es jedem Element eine eindeutige ID vergibt (in jQuery »Expando« genannt).

    Ich würde hier verschiedene Ansätze untersuchen:

    • Ganz stumpf Kopien des gesamten DOM-Baumes speichern und diesen wiederherstellen.
    • Einen Diff-Algorithmus für DOM-Bäume verwenden. Damit wird ein Diff in der History gespeichert, welches später wieder rückgängig gemacht werden kann.
    • Auf komplexer Ebene löst Operational Transformation solche Probleme, mit Fokus auf mehrere parallele Änderungen.

    Mathias

  2. Hi,

    Bei den elternboxen funktioniert das auch, dort kann ich die erste zweite und dritte box nacheinander löschen und sie wieder zurückholen! Allerdings nur wenn ich, nicht wie oben mit einem Attribut arbeite, sondern das objekt selbst in einer variable schreibe und anspreche.

    Da du nicht wirklich beschrieben hast, was genau du machst, kann ich nur vermuten – wahrscheinlich liegt der Fehler an der Stelle, wo du ein HTML-Element-Objekt in ein data-Attribut speichern willst – das kann nur Text speichern, keine komplexen Objekte.

    MfG ChrisB

    --
    Autocomplete has spoiled me to a point where it happens every so often that I encounter a CAPTCHA, and I just type in the first character … and then wait for the rest of the code to be automatically suggested :/