Ответ 1
Вы должны использовать document.getElementById("myTbl").getElementsByTagName('td')
;
У меня есть следующий код JavaScript.
var myCellCollection = document.getElementById('myTbl').cells;
Это хорошо работает в IE и возвращает коллекцию ячеек таблицы. Но одна и та же строка возвращает "undefined" в Firefox. Я использую IE 9 и Firefox 12.
Вы должны использовать document.getElementById("myTbl").getElementsByTagName('td')
;
Начнется с сегодняшнего дня, портируя более старое приложение 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
.
Надеюсь, это поможет кому-то