2011-11-10 2 views
2

Я пытаюсь получить доступ к ячейкам таблицы в javascript, используя метод getElementsByTagName, как показано ниже. В конечном счете, я хочу сравнить каждую ячейку в массиве с другим значением и иметь возможность изменить цвет фона этой ячейки в соответствии со сравнением.2D-массив с getElementsByTagName?

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

Однако, если я попытаюсь получить доступ к ячейкам [0] [0], он вернется не определен. Я чувствую, что я не совсем понимаю, что делает getElementsByTagName ... есть ли надежда на этот метод? Есть ли более эффективный?

+0

ни в одной точке в вашем коде вы создаете второй размер на массив ячеек –

+0

Что делает [ 'getElementsByTagName'] (https: // разработчик. mozilla.org/en/DOM/element.getElementsByTagName) return? «Массив» - неправильный ответ. –

+0

Вы не создали второе измерение. Кроме того, он не возвращает массив. Он возвращает объект, подобный массиву. –

ответ

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'); 

затем построить свой массив из содержимого этих переменных.

0

Используйте это, чтобы получить ячейки таблицы как 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] 
1

Вы можете получить доступ к любой ячейке непосредственно с помощью таблицы элемента .rows имущество и элемент tr элемента .cells:

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

Не нужно создавать собственный массив.

Поэтому не используйте .getElementsByTagName(), который возвращает одномерный массив. (Ну, на самом деле NodeList, но вы можете использовать его как массив до тех пор, как вы помните, что это живого.)

Если вы действительно хотели, чтобы перебрать все клетки, чтобы сравнить их с каким-то другим значением здесь, как , слева направо, сверху вниз, используя .rows и .cells:

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 
    } 
} 
Смежные вопросы