人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

●質問者: takanii
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● a-kuma3
●300ポイント ベストアンサー

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.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ