2011-11-10 7 views
2

下記のように、getElementsByTagNameメソッドを使用してJavaScriptの表のセルにアクセスしようとしています。最終的には、配列内の各セルを別の値と比較し、その比較に応じてそのセルの背景色を変更できるようにします。getElementsByTagNameを持つ2D配列ですか?

var cells = document.getElementById("myTable").getElementsByTagName("tr"); 
for (i = 0; i < cells.length; i++) 
{ 
    cells[i] = cells[i].getElementsByTagName("td"); 
} 

しかし、セル[0] [0]にアクセスしようとすると、定義されていません。私はgetElementsByTagNameがやっていることを完全に理解していないように感じる...このメソッドの希望はありますか?より効率的なものはありますか?

+0

あなたのコード内のどの時点であなたは[ 'getElementsByTagName'](HTTPSを何セルアレイ –

+0

上の第二の次元を作成します://開発者が、.rows.cellsを使用して、右に上から下へ、左。 mozilla.org/ja/DOM/element.getElementsByTagName)return? 「配列」は正解ではありません。 –

+0

2番目のディメンションは作成されていません。また、配列を返さない。これは配列のようなオブジェクトを返します。 –

答えて

1

使用jqueryのそれは簡単になります:あなたが行ごとにこのような何かをする必要があり

var contentArray = new Array(); 



$('tr').each(function(indexParent) { 
    contentArray['row'+indexParent] = new Array(); 
    $(this).children().each(function(indexChild) { 
     contentArray['row'+indexParent]['col'+indexChild] = $(this).html(); 
    }); 
}); 
0

var row = table.getElementsByTagName('tr')[rowIndex]; 
var cells = row.getElementsByTagName('td'); 

これらの変数の内容から配列を作成します。 2D配列が

var tableRows = (document.getElementById("myTable")).getElementsByTagName("tr"); 

var cells = []; 
for(var i = 0; i < tableRows.length; i++) { 
    cells.push(tableRows[i].getElementsByTagName("td")); 
} 

として表のセルを取得するためにそして今あなたが

cells[0][0] 
0

使用このプロパティ、tr要素の.cellsプロパティ:

var myCell = myTable.rows[y].cells[x]; 

独自のアレイを構築する必要はありません。

.getElementsByTagName()は1次元配列を返します。 (実際にはNodeListですが、配列は、がライブであることを覚えている限り使用できます)

すべてのセルをループして他の値と比較したい場合は、ここで説明します

var rows = document.getElementById("myTable").rows; 
for (var y=0; y < rows.length; y++) { 
    for (var x=0; x < rows[y].length; x++) { 
     var cellAtXY = rows[y].cells[x]; 
     cellAtXY.someProperty = something; // your code here 
    } 
} 
1

を使用して、テーブルの上に任意のセルを取得することができますが、テーブル要素の.rowsを使用して直接任意のセルにアクセスすることができます