This is bug 125284 in Opera's BTS
|THead Row0 Cell0||THead Row0 Cell1||THead Row0 Cell2||THead Row0 Cell3||THead Row0 Cell4|
|THead Row1 Cell0||THead Row1 Cell1||THead Row1 Cell2||THead Row1 Cell3||THead Row1 Cell4|
|TFoot Row0 Cell0||TFoot Row0 Cell1||TFoot Row0 Cell2||TFoot Row0 Cell3||TFoot Row0 Cell4|
|TBody Row0 Cell0||TBody Row0 Cell1||Your browser FAILED this test||TBody Row0 Cell3||TBody Row0 Cell4|
|TBody Row1 Cell0||TBody Row1 Cell1||Your browser PASSED this test||TBody Row1 Cell3||TBody Row1 Cell4|
Opera 7.x considers the document (code) order (which has TFoot before TBody) of rows while Mozilla 1.5 and MSIE 6 considers the display (logical) order of rows when assessing the value of i in rows[i]
TFOOT must appear before TBODY within a TABLE definition so that user
agents can render the foot before receiving all of the (potentially
numerous) rows of data.
while http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-6156016 says that rows is defined in this manner:
Rows of type HTMLCollection, readonly
Returns a collection of all the rows in the table, including all in
THEAD, TFOOT, all TBODY elements.
The sequential order issue has been discussed before in a very closely related matter and it lead to a modification in the WD documents (see http://lists.w3.org/Archives/Public/www-dom/2002OctDec/0044.html) as evidenced by the final and latest version of DOM 2 HMTL (January 9th 2003):
rowIndex of type long, readonly, modified in DOM Level 2. This is in logical order and not in document order. The rowIndex does take into account sections (THEAD, TFOOT, or TBODY) within the table, placing THEAD rows first in the index, followed by TBODY rows, followed by TFOOT rows.
coming from DOM 2 HTML; Interface HTMLTableRowElement