javascriptの質問です

以下のコードでtableタグ内のtrをシャッフルしたのですが
それを元どおりの順に戻したいのですがどのようなjavascriptを組めばいいでしょうか?

function shuffle() {
var a = document.getElementsByTagName("TABLE");
var b = Array.prototype.slice.apply(a[0].getElementsByTagName("tr"));
for (var c = b.length; c > 0; c--) {
var d = Math.floor(c * Math.random());
a[0].appendChild(b[d]);
b.splice(d, 1);
}
}

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2014/10/21 00:10:38
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154

ポイント400pt

以前の質問 http://q.hatena.ne.jp/1386097266 で提示されていた jsFiddle のコードを、ちょっといじってみました。
http://jsfiddle.net/k62Cu/2/

// テーブルの内容を保存しておく変数
var table_backup = "";

function sortTable(){
    var tabs = document.getElementsByTagName('TABLE');

    // 最初の一回目で、テーブルの内容を保存する
    if (table_backup == "") {
        table_backup = tabs[0].innerHTML;
        console.log(table_backup);
    }

    var bodies = Array.prototype.slice.apply(tabs[0].getElementsByTagName('tr'));
    for (var r = bodies.length; r > 0; r--) {
        var index = Math.floor(r * Math.random());
        tabs[0].appendChild(bodies[index]);
        bodies.splice(index, 1);
    }
}

// テーブルの内容を元に戻す関数
function restoreTable() {
    if (table_backup != "") {
        var tabs = document.getElementsByTagName('TABLE');
        tabs[0].innerHTML = table_backup;
    }
}

テーブルをシャッフルする関数で、最初に呼ばれたときにテーブルの内容を保存しておきます。
テーブルの内容を元に戻す関数で、保存した内容があれば、テーブルに戻します。

他2件のコメントを見る
id:takanii

おおおお!ありがとうございます!
あの、これをボタンじゃなくて画像アイコン押したら変えれるようにするにはどこを変えればいいのでしょうか?

2014/10/20 14:31:26
id:a-kuma3

これをボタンじゃなくて画像アイコン押したら変えれるようにするにはどこを変えればいいのでしょうか?

こんな感じで。
http://jsfiddle.net/s52ng87d/2/

  • BUTTON タグを IMG タグに変更
  • それぞれの関数で .innerHTML を変えていたのを .src を変えるように変更

です。

2014/10/20 15:17:53

その他の回答1件)

id:taknt No.1

回答回数13539ベストアンサー獲得回数1198

ポイント100pt

元どおりの順番といわれても その順番がどのような順番なのか わからなければ戻せないと思います。

ソートする前に 前の順番を配列に保存してから ソートし、戻すときは、その配列から取得して戻せばいいのではないでしょうか?

id:a-kuma3 No.2

回答回数4974ベストアンサー獲得回数2154ここでベストアンサー

ポイント400pt

以前の質問 http://q.hatena.ne.jp/1386097266 で提示されていた jsFiddle のコードを、ちょっといじってみました。
http://jsfiddle.net/k62Cu/2/

// テーブルの内容を保存しておく変数
var table_backup = "";

function sortTable(){
    var tabs = document.getElementsByTagName('TABLE');

    // 最初の一回目で、テーブルの内容を保存する
    if (table_backup == "") {
        table_backup = tabs[0].innerHTML;
        console.log(table_backup);
    }

    var bodies = Array.prototype.slice.apply(tabs[0].getElementsByTagName('tr'));
    for (var r = bodies.length; r > 0; r--) {
        var index = Math.floor(r * Math.random());
        tabs[0].appendChild(bodies[index]);
        bodies.splice(index, 1);
    }
}

// テーブルの内容を元に戻す関数
function restoreTable() {
    if (table_backup != "") {
        var tabs = document.getElementsByTagName('TABLE');
        tabs[0].innerHTML = table_backup;
    }
}

テーブルをシャッフルする関数で、最初に呼ばれたときにテーブルの内容を保存しておきます。
テーブルの内容を元に戻す関数で、保存した内容があれば、テーブルに戻します。

他2件のコメントを見る
id:takanii

おおおお!ありがとうございます!
あの、これをボタンじゃなくて画像アイコン押したら変えれるようにするにはどこを変えればいいのでしょうか?

2014/10/20 14:31:26
id:a-kuma3

これをボタンじゃなくて画像アイコン押したら変えれるようにするにはどこを変えればいいのでしょうか?

こんな感じで。
http://jsfiddle.net/s52ng87d/2/

  • BUTTON タグを IMG タグに変更
  • それぞれの関数で .innerHTML を変えていたのを .src を変えるように変更

です。

2014/10/20 15:17:53

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません