1

一度に 1 行のみを表示し、更新のたびにランダム化するテーブルを作成しようとしています。これが私のコードです:

<script>
var maxRows = 1; //displays one row at a time
$('#song-list').each(function() {
var cTable = $(this);
var cRows = cTable.find('tr:gt(0)');
var cRowCount = cRows.size();

if (cRowCount < maxRows) {
    return;
}

/* hide all rows above the max initially */
cRows.filter(':gt(' + (maxRows - 1) + ')').hide();

var cPrev = cTable.siblings('.prev');
var cNext = cTable.siblings('.next');

/* start with previous disabled */
cPrev.addClass('disabled');

cPrev.click(function() {
    var cFirstVisible = cRows.index(cRows.filter(':visible'));

    if (cPrev.hasClass('disabled')) {
        return false;
    }

    cRows.hide();
    if (cFirstVisible - maxRows - 1 > 0) {
        cRows.filter(':lt(' + cFirstVisible + '):gt(' + (cFirstVisible - maxRows - 1) +     ')').show();
    } else {
        cRows.filter(':lt(' + cFirstVisible + ')').show();
    }

    if (cFirstVisible - maxRows <= 0) {
        cPrev.addClass('disabled');
    }

    cNext.removeClass('disabled');

    return false;
});

cNext.click(function() {
    var cFirstVisible = cRows.index(cRows.filter(':visible'));

    if (cNext.hasClass('disabled')) {
        return false;
    }

    cRows.hide();
    cRows.filter(':lt(' + (cFirstVisible +2 * maxRows) + '):gt(' + (cFirstVisible +       maxRows - 1) + ')').show();

    if (cFirstVisible + 2 * maxRows >= cRows.size()) {
        cNext.addClass('disabled');
    }

    cPrev.removeClass('disabled');

    return false;
});
});
</script>

コードの 2 番目の部分:

<script>
Array.prototype.shuffle = function() {
for (var i = 0; i < this.length; i++) {
// Random item in this array.
var r = parseInt(Math.random() * this.length);
var obj = this[r];

// Swap.
this[r] = this[i];
this[i] = obj;
}
}

function randomize(tableID) {
var myTable = document.getElementById(tableID);
var myRows = new Array();
for (i=myTable.rows.length-1; i>=0; i--) {
    var theRow = myTable.rows[i];
    myRows.push(theRow);
    theRow.parentNode.removeChild(theRow);
}
myRows.shuffle();
for (j=0; j<myRows.length; j++) {
    myTable.appendChild(myRows[j]);
}
}
window.onload = function() {
randomize("song-list");
}
//-->
</script>

両方の部分は単独で正常に動作しますが、それらを結合しようとすると、ランダム化関数が他のコードに取って代わり、更新後にランダム化する tr の長いリストを取得します。

これらのコードを互いに一致させるためにできることがあるとわかっています。

何か提案はありますか?

4

1 に答える 1

1

コードの最初のブロック全体を関数に入れます。

function showOneRow() {
    ...
}

ランダム化後に呼び出します:

window.onload = function() {
    randomize("song-list");
    showOneRow();
}
于 2012-04-11T11:35:27.787 に答える