テーブルがソートされている間に実行されるページに「ローディングスピナー」を挿入しようとすると問題が発生しました。特に遅いクライアントの場合は10秒ページをソートします。私は、DOMがスピナーコードで修正されているのがわかりますが、表示されません。私はソートが起こる前にこのスピナーの表示を強制するために私ができることがあるかもしれないことを望んでいました、そして、ソートが完了したらそれを止めてください。jQuery:変更されたDOMの表示を強制する
私の並べ替えは、テーブルの最初の列(名前が入っている)のセカンダリソートを処理するように変更した'sorttable.js'に基づいています。
私のスピナーは'spin.js'を使用します。
私はまだこのjQueryに関する初心者ですが、このソート可能なコードはむしろ関与しています。私は下の部分を強調していますが、修正された完全なソート可能なコード(今のところ)は'sorttable-TESTING-ONLY.js'にあり、テストhtmlページは'TESTING-ONLY-sort_and_spin.htm'です。
headrow[i].sorttable_columnindex = i; //line 171
headrow[i].sorttable_tbody = table.tBodies[0];
dean_addEvent(headrow[i],"click", function(e) { //line 176
.... does some stuff with class names, etc
this.sorttable_spinner(1); // set spinner on //line 224
.... builds array to do sort then calls sort functions
if (sort_direction == 'forward') { //line 247
row_array.sort(this.sorttable_sortfunction);
} else {
row_array.sort(this.sorttable_reversesortfunction);
}
tb = this.sorttable_tbody;
for (var j=0; j<row_array.length; j++) {
tb.appendChild(row_array[j][2]);
}
delete row_array;
this.sorttable_spinner(); // now stop the spinner //line 261
:彼らは、列ヘッダのクリック可能なイベントハンドラを作成します
makeSortable: function(table) { //line 75
......
headrow = table.tHead.rows[0].cells;
for (var i=0; i<headrow.length; i++) { //line 114
.....
headrow[i].sorttable_sortfunction = sorttable.guessType(table,i); //line 126
// code to start/stop spinner
headrow[i].sorttable_spinner = (function(val) { //line 136
return function(val) {
var $this = $(this),
data = $this.data();
if (data.spinner) {
data.spinner.stop();
delete data.spinner;
}
if (val > 0) {
var opts = {
.......
};
data.spinner = new Spinner($.extend({color: $this.css('color')}, opts)).spin(this);
// can see spinner added to DOM but does not display...
}
}})(i);
コード:
だから、スクリプトは、ページが読み込まれる(「.....」スキップラインを意味する)いくつかの機能を設定します
これはすべて動作するはずです。 Firebugを搭載したFirefoxでは、Spinnerコードがロードされ、ブラウザで回転していることがわかり、スピンナーをオフにする行がDOMから削除されます。 しかし、デバッグモードではなく、実行しているだけでスピナーは表示されませんか? (IE10でのデバッグではスピナーが表示されません)。
私はさまざまな場所で.show()を試しましたが、利用可能な関数ではないと常に言われました。 ソートのための別個のプロセスを提供するためにwindow.setTimeout(function() {...
への参照を見ましたが、この状況でそれを実装する方法を理解できませんでした。
もし誰かが私に大きな感謝の言葉を与えることができたら。
よろしく、ブライスS.
ところで、休日のインターネットの範囲外の5日間の回答を確認することはできません:-) – user1840734
私はここに私の[テーブルフォークのフォーク](http:// mottie .github.com/tablesorter/docs /)。私はjsFiddleであなたのデモを作成しようとしましたが、3800+のテーブル行を処理できませんでしたが、私のデスクトップではソートに約3秒かかっていました。ゼブラウィジェットを使用せず、css( 'tbody tr:nth-child(odd)')を使って行の色付けを適用すると、さらに高速になります。 – Mottie
こんにちはMottie、それにリンクしてくれてありがとう - 私は2、3週間前にそれを発見したいと思います。私のgoogleFooは私を失望させた。私は今持っているものを追い求めます。乾杯、ブライス。 – user1840734