20行のテーブルTB1があります。上2行と下2行は、その中の一種のヘッダーです。今すぐ1つのAJAX呼び出しを介して、同じ構造を持つ新しいテーブルをhtmlとして取得します。次に、そのhtmlから最初の2行と最後の2行を削除してから、2行目の最後の行のすぐ上にあるテーブルTB1にhtmlを挿入します。コードは、私のAJAX呼び出し機能では、次のようになります。テーブルが動的に更新された場合、JQuery行セレクタが正常に動作しません
var op = $(html);//html returned by AJAX call
var tblData = op.find("#myTable > tbody");
var $tblData = $(tblData);
$tblData.find('tr:first').remove();//remove first 2 lines of headers from response
$tblData.find('tr:first').remove();
$tblData.find('tr:last').remove();//remove the last 2 headers rows
$tblData.find('tr:last').remove();
//add data just after the last data row
$("#TB1 tr:nth-last-child(2)").before($tblData .html());
$("#TB1 tr:last").remove(); //sometimes I need remove the last 1 header row on some condition
今私のテーブルTB1には、(ヘッダを削除した後に新しい行)20(旧行)+ 16を持っている36行を=。 TB1の行の長さチェックを行うと、36が正しいことがわかります。 しかし、セレクタをJQueryに入れてnth-child
またはnth-last-child
を読み込むと、正しく動作しません。時には、新しく追加された行を返して何も返しません。 nth-child(26)
のようにnth-child(24)
のようなものは私に何も与えません.24番目の番号で行を返します。 nth-last-child
と同じです。 これはどういうわけか、行を動的に追加したり削除したりすることによって、セレクタがうんざりしてしまいます。 このような状況に対処する方法は何ですか?
「nth-child」セレクタコールを適切なタイミングで実行している限り、動作してはいけない理由はありません。残念ながら誰もあなたを助けることができないようにあなたのコードを表示していません。 –
最初の更新をoで実行してみましたか? ne関数を実行し、関数の後に 'nth-last-child'を実行しますか? AJAX呼び出しが完了する前に 'nth-last-child'が評価されている可能性があります(なぜなら、Ajaxが終了するまで待つ必要があることを示すものがないからです)。 –
私はAJAXが完了したことを確認するためにAJAX doneメソッドでこれらのテーブルの更新をすべて行いました。テーブルが更新されると、新しいメソッドが呼び出されて行がフェッチされ、計算が実行されます。私は$ tblDataがtrの外側の最後に3つの隠しフィールドを持っているという奇妙なことを発見しました。これが問題の根本的な原因です。それらを取り除いた後、それは正常に動作します。しかし、私が理解できなかったのは、$( "#TB1 tr")です。lengthはそれらを数えずに$( "#TB1 tr:nth-child(24)")は、 –