2009-08-05 6 views
0

私は、アプリケーションでかなりのDOM操作を行い、新しいノードを追加していますが、children()関数が同期しなくなることがわかりました。私は2行のtbody要素を持っています。私はchildren()関数を使ってこれらの行を操作します。次に、2つの行をtbodyに追加します。子供の関数を使用して操作をやり直すと、元の2行だけが返されます。私は毎回子供に新しい呼び出しを行い、自動更新する変数に頼らずにいます。 jQueryのキャッシュをクリアする方法はありますか?セレクタを使ってこのような問題が発生したことに気付き、DOMツリーをさらに選択して戻ってみると(つまり、jQuery CSSセレクタでtbodyを選択しないで、テーブルを選択してからtable.tBodies [0] .rows)を実行しますが、この場合は動作しません。jQuery 1.2.6キャッシング

おかげで、 フィル

+0

jQueryの最新バージョンに更新しないのはなぜですか? –

答えて

0

子供()関数が同期して取得していません。 DOMを変更した場合は、再度実行する必要があります。変更すると、配列の要素を一致させて再作成するコールバックを持つことができます。これはキャッシュ機構ではなく、JavaScriptのようなものです:直線的です。 Ajaxコールはキャッシュされることがありますが、ここではそうではありません。今1.3.2:

勧告 は常にjQueryの最新バージョンを使用します。

更新。これはあなたのコードです:

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"); 
    } 
} 

このコードはキャッシュとは関係がありません。そのほとんどはjQueryを通過します。 あなたがしたいことを説明し、それを行うでしょう。

+0

お返事ありがとうございます。 残念ながら、jQueryのバージョンは私に強制されます。できれば、私は更新します! $(myNode).childrenは毎回何か古い値に頼るのではなく、$(myNode).childrenが2つのtr要素を返すので、間違いなくキャッシュが行われます。$(myNode).rows 4つのtr要素を返します。私は今のところjQueryの方法をあきらめて、行コレクションを使用しています。 –

+0

申し訳ありません - これは$(myNode).rowsではなくmyNode.rowsです! –

+0

簡単な例を見ることができますか? –

関連する問題