<html><head><script>
function sortTable(){
var tab = document.getElementById('k');
var bodies = Array.prototype.slice.apply(tab.getElementsByTagName('tr'));
for (var r = bodies.length; r > 0; r--) {
var index = Math.floor(r * Math.random());tab.appendChild(bodies[index]);
bodies.splice(index, 1);}}</script></head>
<body>
<input type="button" value="シャッフル" onclick="sortTable()">
<table id=k>
<tr><td>a</td><td>a</td></tr>
<tr><td>b</td><td>b</td></tr>
<tr><td>c</td><td>c</td></tr>
</body></html>
というスクリプトを作りうまく動いているのですが
tableが1つしかないのでidでの取得ではなくtableタグでの取得にしようとvar tab = document.getElementById('k');の部分を
document.getElementsByTagName('table'); に変更して試したのですが動きません
何が悪いのでしょうか?
document.getElementsByTagName() メソッドは、getElements~と複数形になっているように、複数の要素を返すことを前提としています。
なので、メソッドの戻り値は、ひとつの要素ではなくて、要素の Collection(配列と、ほぼ同じです)が返されます。
以下のように、TABLE がひとつだけだと保証されているのであれば、先頭を使うというように変更すると、期待通りに動作します。
<html><head><script> function sortTable(){ var tabs = document.getElementsByTagName('TABLE'); var tab = tabs[0]; var bodies = Array.prototype.slice.apply(tab.getElementsByTagName('tr')); for (var r = bodies.length; r > 0; r--) { var index = Math.floor(r * Math.random());tab.appendChild(bodies[index]); bodies.splice(index, 1);}}</script></head> <body> <input type="button" value="シャッフル" onclick="sortTable()"> <table id=k> <tr><td>a</td><td>a</td></tr> <tr><td>b</td><td>b</td></tr> <tr><td>c</td><td>c</td></tr> </body></html>
コメント(0件)