javascriptの質問です

<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'); に変更して試したのですが動きません
何が悪いのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/09/08 01:56:31
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:a-kuma3 No.1

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

ポイント300pt

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>

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

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

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

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

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