2012-04-11 5 views
1

一度に1つの行だけを表示し、各更新時にランダム化する表を作成しようとしています。ここに私のコードは次のとおりです。コードの一度に1つのテーブル行を表示しながらJSでテーブル行をランダム化

<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> 

第二作品:

<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の長いリスト。

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

提案がありますか?

function showOneRow() { 
    ... 
} 

をし、ランダム化した後、それを呼び出す:

答えて

1

は、関数へのコードの全体の第一ブロックを入れて完全に働いた

window.onload = function() { 
    randomize("song-list"); 
    showOneRow(); 
} 
+0

@flowを!速やかなご返信ありがとうございます。ただし、テーブルには1つではなく2つの行が表示されます。ここに私のサイトへのリンクがあります:http://nostaljams.com/beta.htmlなぜこれが起こっているのかに関するアイディアですか? –

+0

IMHO:var cRows = cTable.find( 'tr:gt(0)');代わりに、ここにすべてのtr-sを追加する必要があります:var cRows = cTable.find( 'tr'); – Gavriel

+0

はい!ワオ。私はコーディングが初めてで、人々が自分のやっていることを完全に理解し、この知識をどのように活用するかを知っている時、私を驚かせます。私の質問にすばやく答えていただきありがとうございます。 –

関連する問題