2009-08-05 7 views
0

Ich mache ziemlich viel DOM-Manipulation in meiner App, neue Knoten hinzufügen, und ich habe festgestellt, dass die children() -Funktion kann nicht mehr synchron sein. Ich habe ein tbody-Element mit zwei Zeilen, ich benutze die children() -Funktion, um etwas mit diesen Zeilen zu manipulieren. Ich füge dann zwei weitere Zeilen zum tbody hinzu, wenn ich die children-Funktion wieder verwende, um mehr Manipulation zu machen, bekomme ich nur die ursprünglichen zwei Zeilen zurück, nicht diese plus die zwei Zeilen, die ich gerade hinzugefügt habe. Ich mache jedes Mal einen neuen Anruf bei Kindern, ohne auf eine Variable zu vertrauen, die automatisch aktualisiert wird. Gibt es eine Möglichkeit, den Cache von jQuery zu löschen? Ich habe Probleme wie diese ein paar Mal mit Selektoren bemerkt und bin damit umgegangen, indem ich weiter oben im DOM-Baum gesucht habe und dann zurück navigiert habe (dh nicht den tbody mit einem jQuery-CSS-Selektor auswählen, Wählen Sie die Tabelle und dann table.tBodies [0] .rows), aber das wird in diesem Fall nicht funktionieren.jQuery 1.2.6 caching

Danke, Phil

+0

Warum aktualisieren Sie nicht auf die neueste Version von jQuery? –

Antwort

0

Die Kinder() Funktion erhält nicht mehr synchron. Sie müssen das erneut ausführen, wenn Sie das DOM geändert haben. Beim Modifizieren können Sie einen Callback haben, der Ihr Array von passenden Elementen neu erstellt. Dies ist kein Cache-Mechanismus, funktioniert wie JavaScript: linear. Ajax-Anrufe werden manchmal zwischengespeichert, scheinen aber nicht der Fall zu sein.

Empfehlung Verwenden Sie immer die neueste Version von jQuery: 1.3.2 jetzt.

Aktualisieren. Das ist also Ihr Code:

function removeGroup() { 
    var groupNodes = [ $('#row1')[0], $('#row2') ]; // is this correct? 
    var parent = groupNodes[0].parentNode; 
    if ($(parent).children().length > 2) { 
     parent.removeChild(groupNodes[0]); // why not use dirrectly $('#row1')[0].remove();? 
     parent.removeChild(groupNodes[1]); // same here 
    } else { 
     alert("Can't delete last group"); 
    } 
} 

Dieser Code hat nichts mit Caching zu tun, und die meisten davon auch durch jQuery passieren doenst. Besser erklären, was Sie tun möchten und werden es tun.

+0

Danke für Ihre Antwort. Leider ist die Version von jQuery auf mich gezwungen, ich würde aktualisieren, wenn ich könnte! Es gibt definitiv eine Art von Caching, weil ich $ (myNode) .children jedes Mal anrufe, nicht auf einem alten Wert, aber $ (myNode) .children gibt zwei tr Elemente zurück, während $ (myNode) .rows gibt vier tr-Elemente zurück. Ich habe jetzt mit der jQuery-Methode aufgegeben und bin einfach zur Verwendung der Zeilen-Sammlung gegangen. –

+0

Entschuldigung - das ist myNode.rows, nicht $ (myNode) .rows! –

+0

können wir ein vereinfachtes Beispiel sehen? –