Браузер Firefox не распознает table.cells?

У меня есть следующий код JavaScript.


var myCellCollection = document.getElementById('myTbl').cells;

Это хорошо работает в IE и возвращает коллекцию ячеек таблицы. Но одна и та же строка возвращает "undefined" в Firefox. Я использую IE 9 и Firefox 12.

Ответ 1

Вы должны использовать document.getElementById("myTbl").getElementsByTagName('td');

Ответ 2

Начнется с сегодняшнего дня, портируя более старое приложение Internet Explorer.

Внимание:
container.getElementsByTagName('tagname') возвращает ВСЕ элементы внутри container, которые соответствуют запросу tagname.

Таким образом, table.getElementsByTagName('td') вернет все td, включая те из вложенных таблиц!
Однако table.cells этого не делает (где реализовано).

Кроме того, очевидно, что он не будет соответствовать th. Таким образом, эти ячейки не находятся в возвращенной коллекции, необязательно приводящей к "проблеме" того, как разрешить их порядок относительно td's...

Чтобы закрепить ожидаемую функциональность table.cells (возвращая как th, так и td в DOM-порядке), я написал следующую простую функцию:

function tableCells(t){
   if(t.cells) return t.cells; // use internal routine when supported
   for(var a=[], r=t.rows, y=0, c, x; t=r[y++];){
      for(c=t.cells, x=0; t=c[x++]; a.push(t));
   } 
   return a;
}

В качестве альтернативы, используя "single return" от "if-else", пакеты точно одинаковы, но указанные выше gzips меньше. PS: Я пробовал concat -ting table.rows[X].cells, но это не сработало (хотя я бы не чувствовал себя в безопасности, так или иначе)

Пример использования:
var identifier = tableCells( /*reference to table (or thead/tbody/tfoot) here*/ );
Он вернет массив (а не живую коллекцию), как результат из table.cells.

Надеюсь, это поможет кому-то