- From: Michael(tm) Smith <mike@w3.org>
- Date: Thu, 14 Jan 2010 17:51:44 +0900
- To: HTML Accessibility Task Force <public-html-a11y@w3.org>
note for tracking purposes: this relates to action-8 Cynthia Shelly <cyns@microsoft.com>, 2010-01-14 01:23 +0000: > For our discussion in the html-a11y meeting on Jan 14, I've attached an updated rewrite of the <table> section of the HTML 5 spec. I have not updated the change proposal to go with it, as there are still some areas that need further work and discussion. > > The numbered sections in this email reflect the action items we agreed to in the meeting of Dec 18, which is summarized below. I tried to incorporate actionable parts of the following email discussion where possible, but much of it wasn't very actionable. > > 1) and 2) > The intro to the summary section now reads: > > <blockquote> > > The summary attribute provides a summary of the table's purpose for user agents rendering to non-visual media such as speech and Braille. > > Earlier versions of HTML suggested using summary to provide structural information about the table. This version adds the orientation attributeto allow user agents to derive that information from the table markup. > > The information provided by the summary is needed by users who cannot see the table, but would usually be redundant for those who can. Authors SHOULD use either @summary or <caption><details> to provide information that is obvious to visual users of the table, but would be difficult to determine by navigating the table cell by cell in an auditory user agent, and which cannot be derived by the user agent from the markup. Because it can be quite time-consuming to explore a table with a non-visual user agent, authors SHOULD use summary or <caption><details> to give enough information for users to decide if they need to explore the table further, highlighting the general idea that is to be drawn from the table, describing trends, high and low points, and the like. Authors SHOULD use <caption><details> where a visible, expandable caption is acceptable, but MAY use @summary where business, usability, aesthetic, or other considerations do not allow a visible caption. > > For tables where the relationships are not obvious to users who can see the layout, or in other situations where text describing the structure of the table might be useful to sighted users as well as users of screen-readers and Braille devices, authors SHOULD describe the table using the a caption, legend, or surrounding text instead of, or in addition to, summary. Authors MUST do this in a way that is associated with the table via markup, such that user agents and assistive technology can programmatically determine the relationship. When using @summary or <caption><details> in combination with another technique, authors MUST NOT duplicate the text, but instead use @summary or <caption><details> for the parts of the description that are only useful to users who cannot see the table. > > User agents MUST expose summary text in the accessibility API on their platform as specified in the Mappings from HTML to Platform APIs document [note: This document is still under development and does not yet have a stable URL. It will have one before last call]. Non-visual user agents MUST render summary. Visual user agents SHOULD NOT render summary visually by default in non-editing scenarios. Visual user agents SHOULD provide a User Interface mechanism to toggle display of @summary and <details>[NOTE: Explore (at a near future date) what, if any, other hidden human-readable metadata should be covered by that UI], and MAY render these features by default in editiing scenarios. > > Authoring tools MUST make it possible for authors to add and edit @summary. WSYIWYG authoring tools SHOULD render @summary visually. > > </blockquote> > If people like this, I'll work next on moving and reworking the <details> example for better flow. > > 3) I left orientation, rather than switching to definesorder. After deeper reading, further consideration, and discussion, I've realized that orientation is different than order. Orientation is about whether the user should read the table primarily across rows or down columns. Sorting/order is about whether a table is ordered by a particular row or column. Unsorted tables can still have orientation. > > However, tables with a strict orientation are not that common. In many tables we looked at, the orientation was based on the task. Because of this, I've added a third value to orientation: none. This is the default value. > > Here is the orientation text > <blockquote> > The orientation attribute can have the values horizontal,vertical, or none, which indicate whether the table should be read in horizontally (by row), vertically (by column), or that there is not a clear directionality to the table. none is the default value. Auditory user agents MUST read the table according to this attribute, across rows when it is set to horizontal and down columns when it is set to vertical. User Agents MAY make use of the orientation when splitting tables, such as for small screens or printing. See the National Braille Association's Tape Recording Manual [http://www.rfbd.org/about.htm] for further explaination of rows and columns. > </blockquote> > > Here are some example tables (thanks Wendy) > * WebAIM summary example<http://www.webaim.org/techniques/tables/data.php#summaries> > * Consumer credit<http://www.federalreserve.gov/releases/g19/current/g19.htm> > * Foreign Transactions in Currencies<http://www.federalreserve.gov/econresdata/releases/secholdtrans/current.htm>. > * U.S. Air Traffic Carrier Statistics<http://www.bts.gov/xml/air_traffic/src/index.xml#TwelveMonthsSystem> > > > 4) Deleted the cells API changes. Wendy has agreed to spend some time defining what information AT needs from a table, and where the holes are. Once that work is done, we'll explore API changes that will fill the holes, and make things that are currently possible but difficult easier for AT to determine. The areas we discussed where there are obvious holes are columns, getting cells in situations where there are rowspans or colspans, and major and minor headings. The cell API was intended to address major and minor headings, but we think these need to be addressed as part of a larger effort to understand what AT needs from tables. We need some volunteers to help with this part of the effort. > > > From: public-html-a11y-request@w3.org [mailto:public-html-a11y-request@w3.org] On Behalf Of Cynthia Shelly > Sent: Friday, December 18, 2009 1:43 PM > To: HTML Accessibility Task Force > Subject: RE: Current state of the summary discussion > > I wanted to capture the outcome of the telecon, before I go on vacation. This is what I understood from the discussion on the telecon. Did I miss anything? > > > 1. Treat @summary and <details> the same, as both are hidden metadata. Remove the validator warning for summary, but include strong spec text encouraging the use of visible text (caption, etc) when possible, and describing specific scenarios in which it might not be possible. The validator warning is the blocking issue for many of the accessibility advocates. > > * Janina had an interesting point: being hidden isn't an accessibility feature. Being hidden is a feature for everyone else, so that this text doesn't clutter up their UI. Chaas added that not cluttering the UI can be an accessibility feature for users with cognitive disabilities. I'll try to work this concept into the introductory text somehow. > > 2. Add a SHOULD or MAY for browsers to have UI to allow users to toggle showing summary (and details?). The default would be not to show. Explore (at a near future date) what, if any, other hidden human-readable metadata should be covered by that UI. This seems like it could get us past the issue of hidden metadata being generally harmful, which has been a blocker for many people. > > * Modify the existing SHOULD clause about authoring scenarios to make use of the above mechanism. Consider changing to a MAY. > > * In threads after the call, the suggestion was made to Would adding a <summary> inside <caption>, while still allowing the @summary for back-compat. In many ways, this is the same as details, and could be subject to the same UI toggle. However, I think it would be easier to explain to people that summary changed from an attribute to an element, and would be less disruptive to regulations or existing training. > > 3. Further develop the idea of @definesorder, and how it might interact with aria-sort. This will be a separate change proposal. Wendy Chisholm has offered to help with this work. Leif, your help would be most welcome as well. > > 4. Further explore the cell API, or other ideas that might solve the same issues. Wendy Chisholm has offered to help with this too. > > Ian, if we did #2, would that alleviate your concerns about users not being able to easily show the hidden text? If we combined #1 with #2, would that be something you could live with? Does adding <summary> make any difference? > > I have an action item for Jan 14 to submit an updated change proposal along these lines, working with Wendy Chisholm. > > From: public-html-a11y-request@w3.org [mailto:public-html-a11y-request@w3.org] On Behalf Of Cynthia Shelly > Sent: Thursday, December 17, 2009 7:57 AM > To: HTML Accessibility Task Force > Subject: Current state of the summary discussion > > Janina asked me to provide a summary of the discussion of the @summary attribute for table, to aid us in our discussion on the HTML-a11y call. > > Here is the most recent draft of the change proposal http://www.w3.org/WAI/PF/HTML/wiki/Summary_Change_Proposal_Nov_18%2C_2009 > > Big long discussion with Ian. http://lists.w3.org/Archives/Public/public-html-a11y/2009Dec/0056.html > > Interesting points to bring out > 1) > > > Again, would it help if the proposal recommended using visible text, > > > except in situations where that won't work, due to business or design > > > concerns that make the visible text problematic? > > > > That's what the spec does now, including suggesting at least one > > mechanism that hides the explanatory text by default, while making it > > accessible to all users (namely, using <details>). > > > > <cyns> > > If you're ok with explanatory text being hidden in <details>, why do you object to it being hidden in summary? How do you see them as different? These seem the same to me, except that summary has legacy support, so I'd be happy to better understand your thinking here. > > > > There's a difference between recommending using visible text and issuing a validation warning when you using hidden text. It's the validation warning that people object to. It says that using summary is a bad thing to do, and for people who spend a great deal of time and effort convincing developers to do accessibility work, including adding summary, this makes life very difficult. I suspect that most of the objections would go away if the validation warning went away, and there was just advisory text saying that it's better to use visible text when you can. > > > > What if we got rid of the validation warning, positioned <details> and @summary as mechanisms for including non-visible text, and then discussed the value of including visible text, and situations where authors might not be able to? This seems like something we could all live with, which is all that's needed for consensus. > > </cyns> > > > > Is this a position we can live with? What is required to get official consensus on that? > > > > 2) the cell API additions > cell . cellColumnHeader<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#dom-tdth-cellcolumnheader>s > Returns an HTMLCollection<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#htmlcollection-0> of column headers<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#dom-tdth-column-headers> associated with this cell. > cell . cellColumnGroupHeader<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#dom-tdth-column-group-header>s > Returns an HTMLCollection<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#htmlcollection-0> of column group headers<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#column-group-header> associated with this cell. > cell . cellRowHeader<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#column-header>s > Returns an HTMLCollection<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#htmlcollection-0> of row headers<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#row-header> associated with this cell. > cell . cellRowGroupHeader<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#dom-tdth-column-group-header>s > Returns an HTMLCollection<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#htmlcollection-0> of row group headers<http://lists.w3.org/Archives/Public/public-html/2009Nov/att-0488/table2.html#column-group-header> associated with this cell. > > <cyns> > > > Another goal of this proposal was to make it necessary to use summary > > > less often, by exposing header relationships and direction in markup. > > > Summary in HTML 4 was kind of a catch-all for describing the table, as > > > one would do on a tape-recording of a book. Obviously, HTML can encode > > > a lot more structural data than a voice recording. One of the goals of > > > this proposal was to move some things out of summary, so that it would > > > less often be necessary to have a hidden summary. That's the point of > > > @orientation and of the additions to the cell API, allowing the > > > structure of the table to be exposed more easily to AT, so it does not > > > need to be described by the author. > > </cyns> > > <hixie> > > I have no a priori objection to exposing the table structure as a DOM API. > > That should, IMHO, be filed as a separate bug, since as far as I recall it > > hasn't been through that process yet. > > > > However, I don't think the cell API is a good way to expose the table > > structure to ATs -- ATs should just use browser/OS APIs, not Web DOM APIs. > > </hixie> > > Other thoughts? > > > > 3) Near the bottom of the post, I went through one of the sets of summaries found in a Web crawl. I found most of them to be useful, even though they didn't fully meet the recommendations in WCAG. Is this the data people wanted? I can go through the rest of the sets if that would help. > > Other discussions > > http://lists.w3.org/Archives/Public/public-html-a11y/2009Dec/0026.html > I plan to change @orientation to something more like this proposal, which points to a row or column in the table to define the orientation of the table. Do people like this idea? I don't fully understand the concerns about how this relates to aria-sort, and would like to explore further. Ihttp://lists.w3.org/Archives/Public/public-html-a11y/2009Dec/0064.html It has been suggested that this should be a different change request. Is anyone interested in helping on this? > > Displaying summary values in authoring scenarios, but not otherwise. > > * http://lists.w3.org/Archives/Public/public-html-a11y/2009Dec/0058.html (for) > > * http://lists.w3.org/Archives/Public/public-html-a11y/2009Dec/0059.html (against content-editable, perhaps ok for authoring tools?) > > * http://lists.w3.org/Archives/Public/public-html-a11y/2009Dec/0066.html toggling a variety of hidden-meta-data settings, based on editing scenarios, or perhaps a UI mechanism for toggling? > Content-Description: table3.html > > > taken from HTML5 A vocabulary and associated APIs for HTML and XHTML > Editor's Draft 27 October 2009 > > 4.9.1 The table element > > Status: open issues around @summary, additions to cell. API, and > @orientation > > Categories > [1]Flow content. > > Contexts in which this element may be used: > Where [2]flow content is expected. > > Content model: > In this order: optionally a [3]caption element, followed by either > zero or more [4]colgroup elements, followed optionally by a > [5]thead element, followed optionally by a [6]tfoot element, > followed by either zero or more [7]tbody elements or one or more > [8]tr elements, followed optionally by a [9]tfoot element (but > there can only be one [10]tfoot element child in total). > > Content attributes: > [11]Global attributes > [12]orientation > [13]summary > > DOM interface: > > interface HTMLTableElement : [14]HTMLElement { > attribute [15]HTMLTableCaptionElement [16]caption; > [17]HTMLElement [18]createCaption(); > void [19]deleteCaption(); > attribute [20]HTMLTableSectionElement [21]tHead; > [22]HTMLElement [23]createTHead(); > void [24]deleteTHead(); > attribute [25]HTMLTableSectionElement [26]tFoot; > [27]HTMLElement [28]createTFoot(); > void [29]deleteTFoot(); > readonly attribute [30]HTMLCollection [31]tBodies; > [32]HTMLElement [33]createTBody(); > readonly attribute [34]HTMLCollection [35]rows; > [36]HTMLElement [37]insertRow(in optional long index); > void [38]deleteRow(in long index); > attribute DOMString [39]summary; > attriute DOMString [40]orientation; > }; > > The [41]table element [42]represents data with more than one dimension, in > the form of a [43]table. > > The [44]table element takes part in the [45]table model. > > Tables must not be used as layout aids. Historically, some Web authors > have misused tables in HTML as a way to control their page layout. This > usage is non-conforming, because tools attempting to extract tabular data > from such documents would obtain very confusing results. In particular, > users of accessibility tools like screen readers are likely to find it > very difficult to navigate pages with tables used for layout. > > There are a variety of alternatives to using HTML tables for layout, > primarily using CSS positioning and the CSS table model. > > User agents that do table analysis on arbitrary content are encouraged to > find heuristics to determine which tables actually contain data and which > are merely being used for layout. This specification does not define a > precise heuristic. > > Tables have rows and columns given by their descendants. A table must not > have an empty row or column, as described in the description of the > [46]table model. > > The orientation attribute can have the values horizontal,vertical, or > none, which indicate whether the table should be read in horizontally (by > row), vertically (by column), or that there is not a clear directionality > to the table. none is the default value. Auditory user agents MUST read > the table according to this attribute, across rows when it is set to > horizontal and down columns when it is set to vertical. User Agents MAY > make use of the orientation when splitting tables, such as for small > screens or printing. See the National Braille Association's Tape > Recording Manual [[47]http://www.rfbd.org/about.htm] for further > explaination of rows and columns. > > The status of the summary attribute is an open issue > > The summary attribute provides a summary of the table's purpose for user > agents rendering to non-visual media such as speech and Braille. > > Earlier versions of HTML suggested using summary to provide structural > information about the table. This version adds the orientation attributeto > allow user agents to derive that information from the table markup. > > The information provided by the summary is needed by users who cannot see > the table, but would usually be redundant for those who can. Authors > SHOULD use either @summary or <caption><details> to provide information > that is obvious to visual users of the table, but would be difficult to > determine by navigating the table cell by cell in an auditory user agent, > and which cannot be derived by the user agent from the markup. Because it > can be quite time-consuming to explore a table with a non-visual user > agent, authors SHOULD use summary or <caption><details> to give enough > information for users to decide if they need to explore the table further, > highlighting the general idea that is to be drawn from the table, > describing trends, high and low points, and the like. Authors SHOULD use > <caption><details> where a visible, expandable caption is acceptable, but > MAY use @summary where business, usability, aesthetic, or other > considerations do not allow a visible caption. > > For tables where the relationships are not obvious to users who can see > the layout, or in other situations where text describing the structure of > the table might be useful to sighted users as well as users of > screen-readers and Braille devices, authors SHOULD describe the table > using the a [48]caption, [49]legend, or surrounding text instead of, or in > addition to, [50]summary. Authors MUST do this in a way that is associated > with the table via markup, such that user agents and assistive technology > can programmatically determine the relationship. When using @summary or > <caption><details> in combination with another technique, authors MUST NOT > duplicate the text, but instead use @summary or <caption><details> for the > parts of the description that are only useful to users who cannot see the > table. > > User agents MUST expose summary text in the accessibility API on their > platform as specified in the Mappings from HTML to Platform APIs document > [note: This document is still under development and does not yet have a > stable URL. It will have one before last call]. Non-visual user agents > MUST render summary. Visual user agents SHOULD NOT render summary > visually by default in non-editing scenarios. Visual user agents SHOULD > provide a User Interface mechanism to toggle display of @summary and > <details>[NOTE: Explore (at a near future date) what, if any, other hidden > human-readable metadata should be covered by that UI], and MAY render > these features by default in editiing scenarios. > > Authoring tools MUST make it possible for authors to add and edit > @summary. WSYIWYG authoring tools SHOULD render @summary visually. > > Examples: > > Significant Floods of the 20th Century > [M, million; B, billion] > +------------------------------------------------------------------------------------+ > | |Map| |Area or stream with|Reported|Approximate | | > | Flood Type |no.| Date | flooding | deaths | cost | Comments | > | | | | | |(uninflated)| | > |-------------+---+-----------+-------------------+--------+------------+------------| > | | |Mar.-Apr. | | | |Excessive | > | |1 |1913 |Ohio, statewide |467 |$143M |regional | > | | | | | | |rain. | > | |---+-----------+-------------------+--------+------------+------------| > | | | | | | |Record | > | | |Apr.-May |Mississippi River | | |discharge | > | |2 |1927 |from Missouri to |unknown |$230M |downstream | > | | | |Louisiana | | |from Cairo, | > | | | | | | |Illinois. | > | Regional |---+-----------+-------------------+--------+------------+------------| > | flood | | | | | |Excessive | > | |3 |Mar. 1936 |New England |150+ |$300M |rainfall on | > | | | | | | |snow. | > | |---+-----------+-------------------+--------+------------+------------| > | | | |Kansas and Neosho | | |Excessive | > | |4 |July 1951 |River Basins in |15 |$800M |regional | > | | | |Kansas | | |rain. | > | |---+-----------+-------------------+--------+------------+------------| > | | |Dec. 1964 -| | | |Excessive | > | |5 |Jan. 1965 |Pacific Northwest |47 |$430M |rainfall on | > | | | | | | |snow. | > |-------------+---+-----------+-------------------+--------+------------+------------| > | | | | | | |City of | > | |21 |June 14, |Willow Creek in |225 |unknown |Heppner, | > | | |1903 |Oregon | | |Oregon, | > | | | | | | |destroyed. | > | |---+-----------+-------------------+--------+------------+------------| > | | |June 9-10, |Rapid City, South | | |15 inches of| > | Flash flood |22 |1972 |Dakota |237 |$160M |rain in 5 | > | | | | | | |hours. | > | |---+-----------+-------------------+--------+------------+------------| > | | | | | | |Flash flood | > | | |July 31, |Big Thompson and | | |in canyon | > | |23 |1976 |Cache la Poudre |144 |$39M |after | > | | | |Rivers in Colorado | | |excessive | > | | | | | | |rainfall. | > |-------------+---+-----------+-------------------+--------+------------+------------| > | | | | | | |100-year | > |Ice-jam flood|25 |May 1992 |Yukon River Alaska |0 |unknown |flood on | > | | | | | | |Yukon River.| > |-------------+---+-----------+-------------------+--------+------------+------------| > | |26 |Sept. 1990 |Galveston, Texas |6,000+ |unknown |Hurricane. | > | Storm-surge |---+-----------+-------------------+--------+------------+------------| > | flood |27 |Sept. 1938 |Northeast United |494 |$360M |Hurricane. | > | | | |States | | | | > |-------------+---+-----------+-------------------+--------+------------+------------| > | | | | | | |Dam failure | > | |29 |Feb. 2, |Buffalo Creek in |125 |$60M |after | > | Dam-failure | |1972 |West Virginia | | |excessive | > | flood | | | | | |rainfall. | > | |---+-----------+-------------------+--------+------------+------------| > | |30 |June 5, |Teton River in |11 |$400M |Earthen dam | > | | |1976 |Idaho | | |breached. | > |-------------+---+-----------+-------------------+--------+------------+------------| > | | | |Toutle and lower | | |Result of | > |Mudflow flood|32 |May 18, |Cowlitz Rivers in |60 |unknown |eruption of | > | | |1980 |Washington | | |Mt. St. | > | | | | | | |Helens. | > +------------------------------------------------------------------------------------+ > > > > <table border="1" orientation="row" summary="This table lists the 32 most significant floods > of the 20th Century grouped into 6 types of floods: Regional, flash, > ice-jam, storm-surge, dam-failure, and mudflow. The majority of the > floods (20) are listed as Regional floods. There are between one and > four floods in each of the other 5 categories. "> > > The summary attribute includes the following information: > > * A description of the point of the table, that it lists the 32 most > significant floods of the 20th century. The number of floods is not > included in the caption, as it is easy to see approximately how many > there are by looking at the table. The summary is structured as a full > sentence, unlike the caption, which is strucutred as a title. > * The grouping into 6 types of floods and a list of the groups. This > type of grouping information can be difficult to understand for a user > navigating this markup structure of the table, and is best described > in prose. This information is obvious to visual users of the table. > It can be included in a caption or paragraph under some > circumstances. In a document where the author finds this information > redundant, it is better to use summary, so that the information is > easily available to users who cannot see the table. > * Highlights the trends that are visible in the talbe. "The majority of > the floods (20) are listed as Regional floods. There are between one > and > four floods in each of the other 5 categories." This information is > easy to see visually, but much more difficult to find by navigating > the structure of the table.li> > > The orientation attribute in the horizontal state indicates that the table > should be read across. > > <caption>Significant Floods of the 20th Century <br /> > [M, million; B, billion]</caption> > > The caption includes the title of the table, and a key to abbreviations > used in the table for Millions and Billions. This information is needed by > all users of the table, and so is in the visible caption. > > <tbody> > <tr> > <th id="type">Flood Type</th> > <th id="map">Map no.</th> > <th id="date">Date</th> > <th id="area">Area or stream with flooding</th> > <th id="deaths">Reported deaths</th> > <th id="cost">Approximate cost (uninflated)</th> > <th id="comments">Comments</th> > </tr> > > TH elements with ID attributes are used to associate cells with their > related headers. The cell api has access to these headers > > <tr> > <th rowspan="5" id="regional" scope="row">Regional flood</th> > <td headers="regional map">1</td> > <td headers="regional date">Mar.-Apr. 1913</td> > <td headers="regional area">Ohio, statewide</td> > <td headers="regional deaths">467</td> > <td headers="regional cost">$143M</td> > <td headers="regional comments">Excessive regional rain.</td> > </tr> > > The first cell in this table is also a TH, and will be available via the > cell API. > > <tr> > <td headers="regional map">2</td> > <td headers="regional date">Apr.-May 1927</td> > <td headers="regional area">Mississippi River from Missouri to Louisiana</td> > <td headers="regional deaths">unknown</td> > <td headers="regional cost">$230M</td> > <td headers="regional comments">Record discharge downstream from Cairo, Illinois.</td> > </tr> > <tr> > <td headers="regional map">3</td> > <td headers="regional">Mar. 1936</td> > <td headers="regional">New England</td> > <td headers="regional">150+</td> > <td headers="regional">$300M</td> > <td headers="regional">Excessive rainfall on snow.</td> > </tr> > <tr> > <td headers="regional map">4</td> > <td headers="regional">July 1951</td> > <td headers="regional">Kansas and Neosho River Basins in Kansas</td> > <td headers="regional">15</td> > <td headers="regional">$800M</td> > <td headers="regional">Excessive regional rain.</td> > </tr> > <tr> > <td headers="regional map">5</td> > <td headers="regional">Dec. 1964 - Jan. 1965</td> > <td headers="regional">Pacific Northwest</td> > <td headers="regional">47</td> > <td headers="regional">$430M</td> > <td headers="regional">Excessive rainfall on snow.</td> > </tr> > <tr> > <th rowspan="3" scope="row">Flash flood</th> > <td>21</td> > <td>June 14, 1903</td> > <td>Willow Creek in Oregon</td> > <td>225</td> > <td>unknown</td> > <td>City of Heppner, Oregon, destroyed.</td> > </tr> > <tr> > <td>22</td> > <td>June 9-10, 1972</td> > <td>Rapid City, South Dakota</td> > <td>237</td> > <td>$160M</td> > <td>15 inches of rain in 5 hours.</td> > </tr> > <tr> > <td>23</td> > <td>July 31, 1976</td> > <td>Big Thompson and Cache la Poudre Rivers in Colorado</td> > <td>144</td> > <td>$39M</td> > <td>Flash flood in canyon after excessive rainfall.</td> > </tr> > <tr> > <th scope="row">Ice-jam flood</th> > <td>25</td> > <td>May 1992</td> > <td>Yukon River Alaska</td> > <td>0</td> > <td>unknown</td> > <td>100-year flood on Yukon River.</td> > </tr> > <tr> > <th rowspan="2" scope="row">Storm-surge flood</th> > <td>26</td> > <td>Sept. 1990</td> > <td>Galveston, Texas</td> > <td>6,000+</td> > <td>unknown</td> > <td>Hurricane.</td> > </tr> > <tr> > <td>27</td> > <td>Sept. 1938</td> > <td>Northeast United States</td> > <td>494</td> > <td>$360M</td> > <td>Hurricane.</td> > </tr> > <tr> > <th rowspan="2" scope="row">Dam-failure flood</th> > <td>29</td> > <td>Feb. 2, 1972</td> > <td>Buffalo Creek in West Virginia</td> > <td>125</td> > <td>$60M</td> > <td>Dam failure after excessive rainfall.</td> > </tr> > <tr> > <td>30</td> > <td>June 5, 1976</td> > <td>Teton River in Idaho</td> > <td>11</td> > <td>$400M</td> > <td>Earthen dam breached.</td> > </tr> > <tr> > <th scope="row">Mudflow flood</th> > <td>32</td> > <td>May 18, 1980</td> > <td>Toutle and lower Cowlitz Rivers in Washington</td> > <td>60</td> > <td>unknown</td> > <td>Result of eruption of Mt. St. Helens.</td> > </tr> > </tbody> > </table> > > > The following table has an unusual layout which will not be obvious to > many users who can see it. It might benefit from a visible description > explaining to the way the table is laid out, something like > "Characteristics are given in the second column, with the negative side in > the left column and the positive side in the right column". In this case, > it is best to describe the table in visible text. The text MUST be marked > up in such a way that assistive technologies can determine > programmatically that it is a description for the table. > > For instance, the following table: > > Characteristics with positive > and negative sides > Negative Characteristic Positive > Sad Mood Happy > Failing Grade Passing > > > > ...might benefit from a description explaining the way the table is laid > out, something like "Characteristics are given in the second column, with > the negative side in the left column and the positive side in the right > column". > > There are a variety of ways to include this information, such as: > > In prose, surrounding the table. In this case, the author MUST link the > prose to the table via the aria-describedby attribute > > <p id="foo">In the following table, characteristics are given in the second > column, with the negative side in the left column and the positive > side in the right column.</p> > <table aria-describedby="foo"> > <caption>Characteristics with positive and negative sides</caption> > <thead> > <tr> > <th id="n"> Negative > <th> Characteristic > <th> Positive > <tbody> > <tr> > <td headers="n r1"> Sad > <th id="r1"> Mood > <td> Happy > <tr> > <td headers="n r2"> Failing > <th id="r2"> Grade > <td> Passing > </table> > > In the table's [51]caption > > <table> > <caption> > <strong>Characteristics with positive and negative sides.</strong> > <p>Characteristics are given in the second column, with the > negative side in the left column and the positive side in the right > column.</p> > </caption> > <thead> > <tr> > <th id="n"> Negative > <th> Characteristic > <th> Positive > <tbody> > <tr> > <td headers="n r1"> Sad > <th id="r1"> Mood > <td> Happy > <tr> > <td headers="n r2"> Failing > <th id="r2"> Grade > <td> Passing > </table> > > In the table's [52]caption, in a [53]details element > > <table> > <caption> > <strong>Characteristics with positive and negative sides.</strong> > <details> > <dt>Help</dt> > <dd> > <p>Characteristics are given in the second column, with the > negative side in the left column and the positive side in the right > column.</p> > </dd> > </details> > </caption> > <thead> > <tr> > <th id="n"> Negative > <th> Characteristic > <th> Positive > <tbody> > <tr> > <td headers="n r1"> Sad > <th id="r1"> Mood > <td> Happy > <tr> > <td headers="n r2"> Failing > <th id="r2"> Grade > <td> Passing > </table> > > Next to the table, in the same [54]figure > > <figure> > <dt>Characteristics with positive and negative sides</dt> > <dd> > <p>Characteristics are given in the second column, with the > negative side in the left column and the positive side in the right > column.</p> > <table> > <thead> > <tr> > <th id="n"> Negative > <th> Characteristic > <th> Positive > <tbody> > <tr> > <td headers="n r1"> Sad > <th id="r1"> Mood > <td> Happy > <tr> > <td headers="n r2"> Failing > <th id="r2"> Grade > <td> Passing > </table> > </dd> > </figure> > > Next to the table, in a [55]figure's [56]dt > > <figure> > <dt> > <strong>Characteristics with positive and negative sides</strong> > <p>Characteristics are given in the second column, with the > negative side in the left column and the positive side in the right > column.</p> > </dt> > <dd> > <table> > <thead> > <tr> > <th id="n"> Negative > <th> Characteristic > <th> Positive > <tbody> > <tr> > <td headers="n r1"> Sad > <th id="r1"> Mood > <td> Happy > <tr> > <td headers="n r2"> Failing > <th id="r2"> Grade > <td> Passing > </table> > </dd> > </figure> > > Authors may also use other techniques, or combinations of the above > techniques, as appropriate. > > The best option, of course, rather than writing a description explaining > the way the table is laid out, is to adjust the table such that no > explanation is needed. > > In the case of the table used in the examples above, a simple > rearrangement of the table so that the headers are on the top and left > sides removes the need for an explanation as well as removing the need for > the use of [57]headers attributes: > > <table> > <caption>Characteristics with positive and negative sides</caption> > <thead> > <tr> > <th> Characteristic > <th> Negative > <th> Positive > <tbody> > <tr> > <th> Mood > <td> Sad > <td> Happy > <tr> > <th> Grade > <td> Failing > <td> Passing > </table> > > table . [58]caption [ = value ] > > Returns the table's [59]caption element. > > Can be set, to replace the [60]caption element. If the new value > is not a [61]caption element, throws a [62]HIERARCHY_REQUEST_ERR > exception. > > caption = table . [63]createCaption() > > Ensures the table has a [64]caption element, and returns it. > > table . [65]deleteCaption() > > Ensures the table does not have a [66]caption element. > > table . [67]tHead [ = value ] > > Returns the table's [68]thead element. > > Can be set, to replace the [69]thead element. If the new value is > not a [70]thead element, throws a [71]HIERARCHY_REQUEST_ERR > exception. > > thead = table . [72]createTHead() > > Ensures the table has a [73]thead element, and returns it. > > table . [74]deleteTHead() > > Ensures the table does not have a [75]thead element. > > table . [76]tFoot [ = value ] > > Returns the table's [77]tfoot element. > > Can be set, to replace the [78]tfoot element. If the new value is > not a [79]tfoot element, throws a [80]HIERARCHY_REQUEST_ERR > exception. > > tfoot = table . [81]createTFoot() > > Ensures the table has a [82]tfoot element, and returns it. > > table . [83]deleteTFoot() > > Ensures the table does not have a [84]tfoot element. > > table . [85]tBodies > > Returns an [86]HTMLCollection of the [87]tbody elements of the > table. > > tbody = table . [88]createTBody() > > Creates a [89]tbody element, inserts it into the table, and > returns it. > > table . [90]rows > > Returns an [91]HTMLCollection of the [92]tr elements of the table. > > tr = table . [93]insertRow(index) > > Creates a [94]tr element, along with a [95]tbody if required, > inserts them into the table at the position given by the argument, > and returns the [96]tr. > > The position is relative to the rows in the table. The index −1 is > equivalent to inserting at the end of the table. > > If the given position is less than −1 or greater than the number > of rows, throws an [97]INDEX_SIZE_ERR exception. > > table . [98]deleteRow(index) > > Removes the [99]tr element with the given position in the table. > > The position is relative to the rows in the table. The index −1 is > equivalent to deleting the last row of the table. > > If the given position is less than −1 or greater than the index of > the last row, or if there are no rows, throws an > [100]INDEX_SIZE_ERR exception. > > The caption IDL attribute must return, on getting, the first [101]caption > element child of the [102]table element, if any, or null otherwise. On > setting, if the new value is a [103]caption element, the first > [104]caption element child of the [105]table element, if any, must be > removed, and the new value must be inserted as the first node of the > [106]table element. If the new value is not a [107]caption element, then a > [108]HIERARCHY_REQUEST_ERR DOM exception must be raised instead. > > The createCaption() method must return the first [109]caption element > child of the [110]table element, if any; otherwise a new [111]caption > element must be created, inserted as the first node of the [112]table > element, and then returned. > > The deleteCaption() method must remove the first [113]caption element > child of the [114]table element, if any. > > The tHead IDL attribute must return, on getting, the first [115]thead > element child of the [116]table element, if any, or null otherwise. On > setting, if the new value is a [117]thead element, the first [118]thead > element child of the [119]table element, if any, must be removed, and the > new value must be inserted immediately before the first element in the > [120]table element that is neither a [121]caption element nor a > [122]colgroup element, if any, or at the end of the table if there are no > such elements. If the new value is not a [123]thead element, then a > [124]HIERARCHY_REQUEST_ERR DOM exception must be raised instead. > > The createTHead() method must return the first [125]thead element child of > the [126]table element, if any; otherwise a new [127]thead element must be > created and inserted immediately before the first element in the > [128]table element that is neither a [129]caption element nor a > [130]colgroup element, if any, or at the end of the table if there are no > such elements, and then that new element must be returned. > > The deleteTHead() method must remove the first [131]thead element child of > the [132]table element, if any. > > The tFoot IDL attribute must return, on getting, the first [133]tfoot > element child of the [134]table element, if any, or null otherwise. On > setting, if the new value is a [135]tfoot element, the first [136]tfoot > element child of the [137]table element, if any, must be removed, and the > new value must be inserted immediately before the first element in the > [138]table element that is neither a [139]caption element, a [140]colgroup > element, nor a [141]thead element, if any, or at the end of the table if > there are no such elements. If the new value is not a [142]tfoot element, > then a [143]HIERARCHY_REQUEST_ERR DOM exception must be raised instead. > > The createTFoot() method must return the first [144]tfoot element child of > the [145]table element, if any; otherwise a new [146]tfoot element must be > created and inserted immediately before the first element in the > [147]table element that is neither a [148]caption element, a [149]colgroup > element, nor a [150]thead element, if any, or at the end of the table if > there are no such elements, and then that new element must be returned. > > The deleteTFoot() method must remove the first [151]tfoot element child of > the [152]table element, if any. > > The tBodies attribute must return an [153]HTMLCollection rooted at the > [154]table node, whose filter matches only [155]tbody elements that are > children of the [156]table element. > > The createTBody() method must create a new [157]tbody element, insert it > immediately after the last [158]tbody element in the [159]table element, > if any, or at the end of the [160]table element if the [161]table element > has no [162]tbody element children, and then must return the new > [163]tbody element. > > The rows attribute must return an [164]HTMLCollection rooted at the > [165]table node, whose filter matches only [166]tr elements that are > either children of the [167]table element, or children of [168]thead, > [169]tbody, or [170]tfoot elements that are themselves children of the > [171]table element. The elements in the collection must be ordered such > that those elements whose parent is a [172]thead are included first, in > tree order, followed by those elements whose parent is either a [173]table > or [174]tbody element, again in tree order, followed finally by those > elements whose parent is a [175]tfoot element, still in tree order. > > The behavior of the insertRow(index) method depends on the state of the > table. When it is called, the method must act as required by the first > item in the following list of conditions that describes the state of the > table and the index argument: > > If index is less than −1 or greater than the number of elements in > [176]rows collection: > The method must raise an [177]INDEX_SIZE_ERR exception. > > If the [178]rows collection has zero elements in it, and the [179]table > has no [180]tbody elements in it: > The method must create a [181]tbody element, then create a [182]tr > element, then append the [183]tr element to the [184]tbody > element, then append the [185]tbody element to the [186]table > element, and finally return the [187]tr element. > > If the [188]rows collection has zero elements in it: > The method must create a [189]tr element, append it to the last > [190]tbody element in the table, and return the [191]tr element. > > If index is missing, equal to −1, or equal to the number of items in > [192]rows collection: > The method must create a [193]tr element, and append it to the > parent of the last [194]tr element in the [195]rows collection. > Then, the newly created [196]tr element must be returned. > > Otherwise: > The method must create a [197]tr element, insert it immediately > before the indexth [198]tr element in the [199]rows collection, in > the same parent, and finally must return the newly created [200]tr > element. > > When the deleteRow(index) method is called, the user agent must run the > following steps: > > 1. If index is equal to −1, then index must be set to the number if items > in the [201]rows collection, minus one. > > 2. Now, if index is less than zero, or greater than or equal to the > number of elements in the [202]rows collection, the method must > instead raise an [203]INDEX_SIZE_ERR exception, and these steps must > be aborted. > > 3. Otherwise, the method must remove the indexth element in the [204]rows > collection from its parent. > > The orientation IDL attribute must [205]reflect the content attribute of > the same name. > > The summary IDL attribute must [206]reflect the content attribute of the > same name. > > 4.9.2 The caption element > > Status: Last call for comments > > Categories > None. > > Contexts in which this element may be used: > As the first element child of a [207]table element. > > Content model: > [208]Flow content, but with no descendant [209]table elements. > > Content attributes: > [210]Global attributes > > DOM interface: > > interface HTMLTableCaptionElement : [211]HTMLElement {}; > > The [212]caption element [213]represents the title of the [214]table that > is its parent, if it has a parent and that is a [215]table element. > > The [216]caption element takes part in the [217]table model. > > When a [218]table element is the only content in a [219]figure element's > [220]dd, the [221]caption element should be omitted in favor of the > [222]dt. > > A caption can introduce context for a table, making it significantly > easier to understand. > > Consider, for instance, the following table: > > 1 2 3 4 5 6 > 1 2 3 4 5 6 7 > 2 3 4 5 6 7 8 > 3 4 5 6 7 8 9 > 4 5 6 7 8 9 10 > 5 6 7 8 9 10 11 > 6 7 8 9 10 11 12 > > In the abstract, this table is not clear. However, with a caption giving > the table's number (for reference in the main prose) and explaining its > use, it makes more sense: > > <caption> > <p>Table 1. > <p>This table shows the total score obtained from rolling two > six-sided dice. The first row represents the value of the first die, > the first column the value of the second die. The total is given in > the cell that corresponds to the values of the two dice. > </caption> > > This provides the user with more context: > > Table 1. > > This table shows > the total score > obtained from > rolling two > six-sided dice. > The first row > represents the > value of the > first die, the > first column the > value of the > second die. The > total is given > in the cell that > corresponds to > the values of > the two dice. > 1 2 3 4 5 6 > 1 2 3 4 5 6 7 > 2 3 4 5 6 7 8 > 3 4 5 6 7 8 9 > 4 5 6 7 8 9 10 > 5 6 7 8 9 10 11 > 6 7 8 9 10 11 12 > > > > > > > > > > > > > > > > > > > > > 4.9.3 The colgroup element > > Status: Last call for comments > > Categories > None. > > Contexts in which this element may be used: > As a child of a [223]table element, after any [224]caption > elements and before any [225]thead, [226]tbody, [227]tfoot, and > [228]tr elements. > > Content model: > Zero or more [229]col elements. > > Content attributes: > [230]Global attributes > [231]span > > DOM interface: > > interface HTMLTableColElement : [232]HTMLElement { > attribute unsigned long [233]span; > }; > > The [234]colgroup element [235]represents a [236]group of one or more > [237]columns in the [238]table that is its parent, if it has a parent and > that is a [239]table element. > > If the [240]colgroup element contains no [241]col elements, then the > element may have a span content attribute specified, whose value must be a > [242]valid non-negative integer greater than zero. > > The [243]colgroup element and its [244]span attribute take part in the > [245]table model. > > The span IDL attribute must [246]reflect the content attribute of the same > name. The value must be [247]limited to only non-negative numbers greater > than zero. > > 4.9.4 The col element > > Status: Last call for comments > > Categories > None. > > Contexts in which this element may be used: > As a child of a [248]colgroup element that doesn't have a > [249]span attribute. > > Content model: > Empty. > > Content attributes: > [250]Global attributes > [251]span > > DOM interface: > > [252]HTMLTableColElement, same as for [253]colgroup elements. This > interface defines one member, [254]span. > > If a [255]col element has a parent and that is a [256]colgroup element > that itself has a parent that is a [257]table element, then the [258]col > element [259]represents one or more [260]columns in the [261]column group > represented by that [262]colgroup. > > The element may have a span content attribute specified, whose value must > be a [263]valid non-negative integer greater than zero. > > The [264]col element and its [265]span attribute take part in the > [266]table model. > > The span IDL attribute must [267]reflect the content attribute of the same > name. The value must be [268]limited to only non-negative numbers greater > than zero. > > 4.9.5 The tbody element > > Status: Last call for comments > > Categories > None. > > Contexts in which this element may be used: > As a child of a [269]table element, after any [270]caption, > [271]colgroup, and [272]thead elements, but only if there are no > [273]tr elements that are children of the [274]table element. > > Content model: > Zero or more [275]tr elements > > Content attributes: > [276]Global attributes > > DOM interface: > > interface HTMLTableSectionElement : [277]HTMLElement { > readonly attribute [278]HTMLCollection [279]rows; > [280]HTMLElement [281]insertRow(in optional long index); > void [282]deleteRow(in long index); > }; > > The [283]HTMLTableSectionElement interface is also used for > [284]thead and [285]tfoot elements. > > The [286]tbody element [287]represents a [288]block of [289]rows that > consist of a body of data for the parent [290]table element, if the > [291]tbody element has a parent and it is a [292]table. > > The [293]tbody element takes part in the [294]table model. > > tbody . [295]rows > > Returns an [296]HTMLCollection of the [297]tr elements of the > table section. > > tr = tbody . [298]insertRow( [ index ] ) > > Creates a [299]tr element, inserts it into the table section at > the position given by the argument, and returns the [300]tr. > > The position is relative to the rows in the table section. The > index −1, which is the default if the argument is omitted, is > equivalent to inserting at the end of the table section. > > If the given position is less than −1 or greater than the number > of rows, throws an [301]INDEX_SIZE_ERR exception. > > tbody . [302]deleteRow(index) > > Removes the [303]tr element with the given position in the table > section. > > The position is relative to the rows in the table section. The > index −1 is equivalent to deleting the last row of the table > section. > > If the given position is less than −1 or greater than the index of > the last row, or if there are no rows, throws an > [304]INDEX_SIZE_ERR exception. > > The rows attribute must return an [305]HTMLCollection rooted at the > element, whose filter matches only [306]tr elements that are children of > the element. > > The insertRow(index) method must, when invoked on an element table > section, act as follows: > > If index is less than −1 or greater than the number of elements in the > [307]rows collection, the method must raise an [308]INDEX_SIZE_ERR > exception. > > If index is missing, equal to −1, or equal to the number of items in the > [309]rows collection, the method must create a [310]tr element, append it > to the element table section, and return the newly created [311]tr > element. > > Otherwise, the method must create a [312]tr element, insert it as a child > of the table section element, immediately before the indexth [313]tr > element in the [314]rows collection, and finally must return the newly > created [315]tr element. > > The deleteRow(index) method must remove the indexth element in the > [316]rows collection from its parent. If index is less than zero or > greater than or equal to the number of elements in the [317]rows > collection, the method must instead raise an [318]INDEX_SIZE_ERR > exception. > > 4.9.6 The thead element > > Status: Last call for comments > > Categories > None. > > Contexts in which this element may be used: > As a child of a [319]table element, after any [320]caption, and > [321]colgroup elements and before any [322]tbody, [323]tfoot, and > [324]tr elements, but only if there are no other [325]thead > elements that are children of the [326]table element. > > Content model: > Zero or more [327]tr elements > > Content attributes: > [328]Global attributes > > DOM interface: > [329]HTMLTableSectionElement, as defined for [330]tbody elements. > > The [331]thead element [332]represents the [333]block of [334]rows that > consist of the column labels (headers) for the parent [335]table element, > if the [336]thead element has a parent and it is a [337]table. > > The [338]thead element takes part in the [339]table model. > > 4.9.7 The tfoot element > > Status: Last call for comments > > Categories > None. > > Contexts in which this element may be used: > As a child of a [340]table element, after any [341]caption, > [342]colgroup, and [343]thead elements and before any [344]tbody > and [345]tr elements, but only if there are no other [346]tfoot > elements that are children of the [347]table element. > As a child of a [348]table element, after any [349]caption, > [350]colgroup, [351]thead, [352]tbody, and [353]tr elements, but > only if there are no other [354]tfoot elements that are children > of the [355]table element. > > Content model: > Zero or more [356]tr elements > > Content attributes: > [357]Global attributes > > DOM interface: > [358]HTMLTableSectionElement, as defined for [359]tbody elements. > > The [360]tfoot element [361]represents the [362]block of [363]rows that > consist of the column summaries (footers) for the parent [364]table > element, if the [365]tfoot element has a parent and it is a [366]table. > > The [367]tfoot element takes part in the [368]table model. > > 4.9.8 The tr element > > Status: Last call for comments > > Categories > None. > > Contexts in which this element may be used: > As a child of a [369]thead element. > As a child of a [370]tbody element. > As a child of a [371]tfoot element. > As a child of a [372]table element, after any [373]caption, > [374]colgroup, and [375]thead elements, but only if there are no > [376]tbody elements that are children of the [377]table element. > > Content model: > When the parent node is a [378]thead element: Zero or more [379]th > elements > Otherwise: Zero or more [380]td or [381]th elements > > Content attributes: > [382]Global attributes > > DOM interface: > > interface HTMLTableRowElement : [383]HTMLElement { > readonly attribute long [384]rowIndex; > readonly attribute long [385]sectionRowIndex; > readonly attribute [386]HTMLCollection [387]cells; > [388]HTMLElement [389]insertCell(in optional long index); > void [390]deleteCell(in long index); > }; > > The [391]tr element [392]represents a [393]row of [394]cells in a > [395]table. > > The [396]tr element takes part in the [397]table model. > > tr . [398]rowIndex > > Returns the position of the row in the table's [399]rows list. > > Returns −1 if the element isn't in a table. > > tr . [400]sectionRowIndex > > Returns the position of the row in the table section's [401]rows > list. > > Returns −1 if the element isn't in a table section. > > tr . [402]cells > > Returns an [403]HTMLCollection of the [404]td and [405]th elements > of the row. > > cell = tr . [406]insertCell( [ index ] ) > > Creates a [407]td element, inserts it into the table row at the > position given by the argument, and returns the [408]td. > > The position is relative to the cells in the row. The index −1, > which is the default if the argument is omitted, is equivalent to > inserting at the end of the row. > > If the given position is less than −1 or greater than the number > of cells, throws an [409]INDEX_SIZE_ERR exception. > > tr . [410]deleteCell(index) > > Removes the [411]td or [412]th element with the given position in > the row. > > The position is relative to the cells in the row. The index −1 is > equivalent to deleting the last cell of the row. > > If the given position is less than −1 or greater than the index of > the last cell, or if there are no cells, throws an > [413]INDEX_SIZE_ERR exception. > > The rowIndex attribute must, if the element has a parent [414]table > element, or a parent [415]tbody, [416]thead, or [417]tfoot element and a > grandparent [418]table element, return the index of the [419]tr element in > that [420]table element's [421]rows collection. If there is no such > [422]table element, then the attribute must return −1. > > The sectionRowIndex attribute must, if the element has a parent > [423]table, [424]tbody, [425]thead, or [426]tfoot element, return the > index of the [427]tr element in the parent element's rows collection (for > tables, that's the [428]rows collection; for table sections, that's the > [429]rows collection). If there is no such parent element, then the > attribute must return −1. > > The cells attribute must return an [430]HTMLCollection rooted at the > [431]tr element, whose filter matches only [432]td and [433]th elements > that are children of the [434]tr element. > > The insertCell(index) method must act as follows: > > If index is less than −1 or greater than the number of elements in the > [435]cells collection, the method must raise an [436]INDEX_SIZE_ERR > exception. > > If index is missing, equal to −1, or equal to the number of items in > [437]cells collection, the method must create a [438]td element, append it > to the [439]tr element, and return the newly created [440]td element. > > Otherwise, the method must create a [441]td element, insert it as a child > of the [442]tr element, immediately before the indexth [443]td or [444]th > element in the [445]cells collection, and finally must return the newly > created [446]td element. > > The deleteCell(index) method must remove the indexth element in the > [447]cells collection from its parent. If index is less than zero or > greater than or equal to the number of elements in the [448]cells > collection, the method must instead raise an [449]INDEX_SIZE_ERR > exception. > > 4.9.9 The td element > > Status: Last call for comments > > Categories > [450]Sectioning root. > > Contexts in which this element may be used: > As a child of a [451]tr element. > > Content model: > [452]Flow content. > > Content attributes: > [453]Global attributes > [454]colspan > [455]rowspan > [456]headers > > DOM interface: > > interface HTMLTableDataCellElement : [457]HTMLTableCellElement {}; > > The [458]td element [459]represents a data [460]cell in a table. > > The [461]td element and its [462]colspan, [463]rowspan, and [464]headers > attributes take part in the [465]table model. > > 4.9.10 The th element > > Status: Last call for comments > > Categories > None. > > Contexts in which this element may be used: > As a child of a [466]tr element. > > Content model: > [467]Phrasing content. > > Content attributes: > [468]Global attributes > [469]colspan > [470]rowspan > [471]headers > [472]scope > > DOM interface: > > interface HTMLTableHeaderCellElement : [473]HTMLTableCellElement { > attribute DOMString [474]scope; > }; > > The [475]th element [476]represents a header [477]cell in a table. > > The [478]th element may have a scope content attribute specified. The > [479]scope attribute is an [480]enumerated attribute with five states, > four of which have explicit keywords: > > The row keyword, which maps to the row state > The row state means the header cell applies to some of the > subsequent cells in the same row(s). > > The col keyword, which maps to the column state > The column state means the header cell applies to some of the > subsequent cells in the same column(s). > > The rowgroup keyword, which maps to the row group state > The row group state means the header cell applies to all the > remaining cells in the row group. A [481]th element's [482]scope > attribute must not be in the [483]row group state if the element > is not anchored in a [484]row group. > > The colgroup keyword, which maps to the column group state > The column group state means the header cell applies to all the > remaining cells in the column group. A [485]th element's > [486]scope attribute must not be in the [487]column group state if > the element is not anchored in a [488]column group. > > The auto state > The auto state makes the header cell apply to a set of cells > selected based on context. > > The [489]scope attribute's missing value default is the auto state. > > The [490]th element and its [491]colspan, [492]rowspan, [493]headers, and > [494]scope attributes take part in the [495]table model. > > The scope IDL attribute must [496]reflect the content attribute of the > same name. > > The following example shows how the [497]scope attribute's [498]rowgroup > value affects which data cells a header cell applies to. > > Here is a markup fragment showing a table: > > <table> > <thead> > <tr> <th> ID <th> Measurement <th> Average <th> Maximum > <tbody> > <tr> <td> <th scope=rowgroup> Cats <td> <td> > <tr> <td> 93 <th> Legs <td> 3.5 <td> 4 > <tr> <td> 10 <th> Tails <td> 1 <td> 1 > <tbody> > <tr> <td> <th scope=rowgroup> English speakers <td> <td> > <tr> <td> 32 <th> Legs <td> 2.67 <td> 4 > <tr> <td> 35 <th> Tails <td> 0.33 <td> 1 > </table> > > This would result in the following table: > > ID Measurement Average Maximum > Cats > 93 Legs 3.5 4 > 10 Tails 1 1 > English speakers > 32 Legs 2.67 4 > 35 Tails 0.33 1 > > The headers in the first row all apply directly down to the rows in their > column. > > The headers with the explicit [499]scope attributes apply to all the cells > in their row group other than the cells in the first column. > > The remaining headers apply just to the cells to the right of them. > > 4.9.11 Attributes common to [500]td and [501]th elements > > Status: Last call for comments > > The [502]td and [503]th elements may have a colspan content attribute > specified, whose value must be a [504]valid non-negative integer greater > than zero. > > The [505]td and [506]th elements may also have a rowspan content attribute > specified, whose value must be a [507]valid non-negative integer. > > These attributes give the number of columns and rows respectively that the > cell is to span. These attributes must not be used to overlap cells, as > described in the description of the [508]table model. > > -------------------------------------------------------------------------- > > The [509]td and [510]th element may have a headers content attribute > specified. The [511]headers attribute, if specified, must contain a string > consisting of an [512]unordered set of unique space-separated tokens, each > of which must have the value of an ID of a [513]th element taking part in > the same [514]table as the [515]td or [516]th element (as defined by the > [517]table model). > > A [518]th element with ID id is said to be directly targeted by all > [519]td and [520]th elements in the same [521]table that have [522]headers > attributes whose values include as one of their tokens the ID id. A > [523]th element A is said to be targeted by a [524]th or [525]td element B > if either A is directly targeted by B or if there exists an element C that > is itself targeted by the element B and A is directly targeted by C. > > A [526]th element must not be targeted by itself. > > The [527]colspan, [528]rowspan, and [529]headers attributes take part in > the [530]table model. > > -------------------------------------------------------------------------- > > The [531]td and [532]th elements implement interfaces that inherit from > the [533]HTMLTableCellElement interface: > > interface HTMLTableCellElement : [534]HTMLElement { > attribute unsigned long [535]colSpan; > attribute unsigned long [536]rowSpan; > attribute DOMString [537]headers; > readonly attribute long [538]cellIndex; > }; > > cell . [539]cellIndex > > Returns the position of the cell in the row's [540]cells list. > > Returns 0 if the element isn't in a row. > > The colSpan IDL attribute must [541]reflect the content attribute of the > same name. The value must be [542]limited to only non-negative numbers > greater than zero. > > The rowSpan IDL attribute must [543]reflect the content attribute of the > same name. Its default value, which must be used if [544]parsing the > attribute as a non-negative integer returns an error, is 1. > > The headers IDL attribute must [545]reflect the content attribute of the > same name. > > The cellIndex IDL attribute must, if the element has a parent [546]tr > element, return the index of the cell's element in the parent element's > [547]cells collection. If there is no such parent element, then the > attribute must return 0. > > 4.9.12 Processing model > > Status: Last call for comments > > The various table elements and their content attributes together define > the table model. > > A table consists of cells aligned on a two-dimensional grid of slots with > coordinates (x, y). The grid is finite, and is either empty or has one or > more slots. If the grid has one or more slots, then the x coordinates are > always in the range 0 ≤ x < x[width], and the y coordinates are always in > the range 0 ≤ y < y[height]. If one or both of x[width] and y[height] are > zero, then the table is empty (has no slots). Tables correspond to > [548]table elements. > > A cell is a set of slots anchored at a slot (cell[x], cell[y]), and with a > particular width and height such that the cell covers all the slots with > coordinates (x, y) where cell[x] ≤ x < cell[x]+width and > cell[y] ≤ y < cell[y]+height. Cells can either be data cells or header > cells. Data cells correspond to [549]td elements, and header cells > correspond to [550]th elements. Cells of both types can have zero or more > associated header cells. > > It is possible, in certain error cases, for two cells to occupy the same > slot. > > A row is a complete set of slots from x=0 to x=x[width]-1, for a > particular value of y. Rows correspond to [551]tr elements. > > A column is a complete set of slots from y=0 to y=y[height]-1, for a > particular value of x. Columns can correspond to [552]col elements, but in > the absence of [553]col elements are implied. > > A row group is a set of [554]rows anchored at a slot (0, group[y]) with a > particular height such that the row group covers all the slots with > coordinates (x, y) where 0 ≤ x < x[width] and > group[y] ≤ y < group[y]+height. Row groups correspond to [555]tbody, > [556]thead, and [557]tfoot elements. Not every row is necessarily in a row > group. > > A column group is a set of [558]columns anchored at a slot (group[x], 0) > with a particular width such that the column group covers all the slots > with coordinates (x, y) where group[x] ≤ x < group[x]+width and > 0 ≤ y < y[height]. Column groups correspond to [559]colgroup elements. Not > every column is necessarily in a column group. > > [560]Row groups cannot overlap each other. Similarly, [561]column groups > cannot overlap each other. > > A [562]cell cannot cover slots that are from two or more [563]row groups. > It is, however, possible for a cell to be in multiple [564]column groups. > All the slots that form part of one cell are part of zero or one [565]row > groups and zero or more [566]column groups. > > In addition to [567]cells, [568]columns, [569]rows, [570]row groups, and > [571]column groups, [572]tables can have a [573]caption element associated > with them. This gives the table a heading, or legend. > > A table model error is an error with the data represented by [574]table > elements and their descendants. Documents must not have table model > errors. > > 4.9.12.1 Forming a table > > Status: Last call for comments > > To determine which elements correspond to which slots in a [575]table > associated with a [576]table element, to determine the dimensions of the > table (x[width] and y[height]), and to determine if there are any > [577]table model errors, user agents must use the following algorithm: > > 1. Let x[width] be zero. > > 2. Let y[height] be zero. > > 3. Let pending [578]tfoot elements be a list of [579]tfoot elements, > initially empty. > > 4. Let the table be the [580]table represented by the [581]table element. > The x[width] and y[height] variables give the table's dimensions. The > table is initially empty. > > 5. If the [582]table element has no children elements, then return the > table (which will be empty), and abort these steps. > > 6. Associate the first [583]caption element child of the [584]table > element with the table. If there are no such children, then it has no > associated [585]caption element. > > 7. Let the current element be the first element child of the [586]table > element. > > If a step in this algorithm ever requires the current element to be > advanced to the next child of the table when there is no such next > child, then the user agent must jump to the step labeled end, near the > end of this algorithm. > > 8. While the current element is not one of the following elements, > [587]advance the current element to the next child of the [588]table: > > * [589]colgroup > * [590]thead > * [591]tbody > * [592]tfoot > * [593]tr > > 9. If the current element is a [594]colgroup, follow these substeps: > > 1. Column groups: Process the current element according to the > appropriate case below: > > If the current element has any [595]col element children > > Follow these steps: > > 1. Let x[start] have the value of x[width]. > > 2. Let the current column be the first [596]col > element child of the [597]colgroup element. > > 3. Columns: If the current column [598]col element > has a [599]span attribute, then parse its value > using the [600]rules for parsing non-negative > integers. > > If the result of parsing the value is not an > error or zero, then let span be that value. > > Otherwise, if the [601]col element has no > [602]span attribute, or if trying to parse the > attribute's value resulted in an error, then > let span be 1. > > 4. Increase x[width] by span. > > 5. Let the last span [603]columns in the table > correspond to the current column [604]col > element. > > 6. If current column is not the last [605]col > element child of the [606]colgroup element, > then let the current column be the next > [607]col element child of the [608]colgroup > element, and return to the step labeled > columns. > > 7. Let all the last [609]columns in the table from > x=x[start] to x=x[width]-1 form a new > [610]column group, anchored at the slot > (x[start], 0), with width x[width]-x[start], > corresponding to the [611]colgroup element. > > If the current element has no [612]col element children > > 1. If the [613]colgroup element has a [614]span > attribute, then parse its value using the > [615]rules for parsing non-negative integers. > > If the result of parsing the value is not an > error or zero, then let span be that value. > > Otherwise, if the [616]colgroup element has no > [617]span attribute, or if trying to parse the > attribute's value resulted in an error, then > let span be 1. > > 2. Increase x[width] by span. > > 3. Let the last span [618]columns in the table > form a new [619]column group, anchored at the > slot (x[width]-span, 0), with width span, > corresponding to the [620]colgroup element. > > 2. [621]Advance the current element to the next child of the > [622]table. > > 3. While the current element is not one of the following elements, > [623]advance the current element to the next child of the > [624]table: > > * [625]colgroup > * [626]thead > * [627]tbody > * [628]tfoot > * [629]tr > > 4. If the current element is a [630]colgroup element, jump to the > step labeled column groups above. > > 10. Let y[current] be zero. > > 11. Let the list of downward-growing cells be an empty list. > > 12. Rows: While the current element is not one of the following elements, > [631]advance the current element to the next child of the [632]table: > > * [633]thead > * [634]tbody > * [635]tfoot > * [636]tr > > 13. If the current element is a [637]tr, then run the [638]algorithm for > processing rows, [639]advance the current element to the next child of > the [640]table, and return to the step labeled rows. > > 14. Run the [641]algorithm for ending a row group. > > 15. If the current element is a [642]tfoot, then add that element to the > list of pending [643]tfoot elements, [644]advance the current element > to the next child of the [645]table, and return to the step labeled > rows. > > 16. The current element is either a [646]thead or a [647]tbody. > > Run the [648]algorithm for processing row groups. > > 17. [649]Advance the current element to the next child of the [650]table. > > 18. Return to the step labeled rows. > > 19. End: For each [651]tfoot element in the list of pending [652]tfoot > elements, in tree order, run the [653]algorithm for processing row > groups. > > 20. If there exists a [654]row or [655]column in the [656]table the table > containing only [657]slots that do not have a [658]cell anchored to > them, then this is a [659]table model error. > > 21. Return the table. > > The algorithm for processing row groups, which is invoked by the set of > steps above for processing [660]thead, [661]tbody, and [662]tfoot > elements, is: > > 1. Let y[start] have the value of y[height]. > > 2. For each [663]tr element that is a child of the element being > processed, in tree order, run the [664]algorithm for processing rows. > > 3. If y[height] > y[start], then let all the last [665]rows in the table > from y=y[start] to y=y[height]-1 form a new [666]row group, anchored > at the slot with coordinate (0, y[start]), with height > y[height]-y[start], corresponding to the element being processed. > > 4. Run the [667]algorithm for ending a row group. > > The algorithm for ending a row group, which is invoked by the set of steps > above when starting and ending a block of rows, is: > > 1. While y[current] is less than y[height], follow these steps: > > 1. Run the [668]algorithm for growing downward-growing cells. > > 2. Increase y[current] by 1. > > 2. Empty the list of downward-growing cells. > > The algorithm for processing rows, which is invoked by the set of steps > above for processing [669]tr elements, is: > > 1. If y[height] is equal to y[current], then increase y[height] by 1. > (y[current] is never greater than y[height].) > > 2. Let x[current] be 0. > > 3. Run the [670]algorithm for growing downward-growing cells. > > 4. If the [671]tr element being processed has no [672]td or [673]th > element children, then increase y[current] by 1, abort this set of > steps, and return to the algorithm above. > > 5. Let current cell be the first [674]td or [675]th element in the > [676]tr element being processed. > > 6. Cells: While x[current] is less than x[width] and the slot with > coordinate (x[current], y[current]) already has a cell assigned to it, > increase x[current] by 1. > > 7. If x[current] is equal to x[width], increase x[width] by 1. > (x[current] is never greater than x[width].) > > 8. If the current cell has a [677]colspan attribute, then [678]parse that > attribute's value, and let colspan be the result. > > If parsing that value failed, or returned zero, or if the attribute is > absent, then let colspan be 1, instead. > > 9. If the current cell has a [679]rowspan attribute, then [680]parse that > attribute's value, and let rowspan be the result. > > If parsing that value failed or if the attribute is absent, then let > rowspan be 1, instead. > > 10. If rowspan is zero, then let cell grows downward be true, and set > rowspan to 1. Otherwise, let cell grows downward be false. > > 11. If x[width] < x[current]+colspan, then let x[width] be > x[current]+colspan. > > 12. If y[height] < y[current]+rowspan, then let y[height] be > y[current]+rowspan. > > 13. Let the slots with coordinates (x, y) such that > x[current] ≤ x < x[current]+colspan and > y[current] ≤ y < y[current]+rowspan be covered by a new [681]cell c, > anchored at (x[current], y[current]), which has width colspan and > height rowspan, corresponding to the current cell element. > > If the current cell element is a [682]th element, let this new cell c > be a header cell; otherwise, let it be a data cell. > > To establish which header cells apply to the current cell element, use > the [683]algorithm for assigning header cells described in the next > section. > > If any of the slots involved already had a [684]cell covering them, > then this is a [685]table model error. Those slots now have two cells > overlapping. > > 14. If cell grows downward is true, then add the tuple {c, x[current], > colspan} to the list of downward-growing cells. > > 15. Increase x[current] by colspan. > > 16. If current cell is the last [686]td or [687]th element in the [688]tr > element being processed, then increase y[current] by 1, abort this set > of steps, and return to the algorithm above. > > 17. Let current cell be the next [689]td or [690]th element in the [691]tr > element being processed. > > 18. Return to the step labelled cells. > > When the algorithms above require the user agent to run the algorithm for > growing downward-growing cells, the user agent must, for each {cell, > cell[x], width} tuple in the list of downward-growing cells, if any, > extend the [692]cell cell so that it also covers the slots with > coordinates (x, y[current]), where cell[x] ≤ x < cell[x]+width. > > 4.9.12.2 Forming relationships between data cells and header cells > > Status: Last call for comments > > Each cell can be assigned zero or more header cells. The algorithm for > assigning header cells to a cell principal cell is as follows. > > 1. Let header list be an empty list of cells. > > 2. Let (principal[x], principal[y]) be the coordinate of the slot to > which the principal cell is anchored. > > 3. If the principal cell has a [693]headers attribute specified > > 1. Take the value of the principal cell's [694]headers > attribute and [695]split it on spaces, letting id > list be the list of tokens obtained. > > 2. For each token in the id list, if the first element > in the Document with an ID equal to the token is a > cell in the same [696]table, and that cell is not > the principal cell, then add that cell to header > list. > > If principal cell does not have a [697]headers attribute > specified > > 1. Let principal[width] be the width of the principal > cell. > > 2. Let principal[height] be the height of the principal > cell. > > 3. For each value of y from principal[y] to > principal[y]+principal[height]-1, run the > [698]internal algorithm for scanning and assigning > header cells, with the principal cell, the header > list, the initial coordinate (principal[x],y), and > the increments Δx=−1 and Δy=0. > > 4. For each value of x from principal[x] to > principal[x]+principal[width]-1, run the > [699]internal algorithm for scanning and assigning > header cells, with the principal cell, the header > list, the initial coordinate (x,principal[y]), and > the increments Δx=0 and Δy=−1. > > 5. If the principal cell is anchored in a [700]row > group, then add all header cells that are [701]row > group headers and are anchored in the same row group > with an x-coordinate less than or equal to > principal[x]+principal[width]-1 and a y-coordinate > less than or equal to > principal[y]+principal[height]-1 to header list. > > 6. If the principal cell is anchored in a [702]column > group, then add all header cells that are > [703]column group headers and are anchored in the > same column group with an x-coordinate less than or > equal to principal[x]+principal[width]-1 and a > y-coordinate less than or equal to > principal[y]+principal[height]-1 to header list. > > 4. Remove all the [704]empty cells from the header list. > > 5. Remove any duplicates from the header list. > > 6. Assign the headers in the header list to the principal cell. > > The internal algorithm for scanning and assigning header cells, given a > principal cell, a header list, an initial coordinate (initial[x], > initial[y]), and Δx and Δy increments, is as follows: > > 1. Let x equal initial[x]. > > 2. Let y equal initial[y]. > > 3. Let opaque headers be an empty list of cells. > > 4. If principal cell is a header cell > > Let in header block be true, and let headers from current > header block be a list of cells containing just the > principal cell. > > Otherwise > > Let in header block be false and let headers from current > header block be an empty list of cells. > > 5. Loop: Increment x by Δx; increment y by Δy. > > For each invocation of this algorithm, one of Δx and Δy will be −1, > and the other will be 0. > > 6. If either x or y is less than 0, then abort this internal algorithm. > > 7. If there is no cell covering slot (x, y), or if there is more than one > cell covering slot (x, y), return to the substep marked loop. > > 8. Let current cell be the cell covering slot (x, y). > > 9. If current cell is a header cell > > 1. Set in header block to true. > > 2. Add current cell to headers from current header > block. > > 3. Let blocked be false. > > 4. If Δx is 0 > > If there are any cells in the opaque > headers list anchored with the same > x-coordinate as the current cell, and > with the same width as current cell, > then let blocked be true. > > If the current cell is not a > [705]column header, then let blocked be > true. > > If Δy is 0 > > If there is are any cells in the opaque > headers list anchored with the same > y-coordinate as the current cell, and > with the same height as current cell, > then let blocked be true. > > If the current cell is not a [706]row > header, then let blocked be true. > > 5. If blocked is false, then add the current cell to > the headers list. > > If current cell is a data cell and in header block is true > > Set in header block to false. Add all the cells in > headers from current header block to the opaque headers > list, and empty the headers from current header block > list. > > 10. Return to the step marked loop. > > A header cell anchored at the slot with coordinate (x, y) with width width > and height height is said to be a column header if any of the following > conditions are true: > > * The cell's [707]scope attribute is in the [708]column state, or > * The cell's [709]scope attribute is in the [710]auto state, and there > are no data cells in any of the cells covering slots with > y-coordinates y .. y+height-1. > > A header cell anchored at the slot with coordinate (x, y) with width width > and height height is said to be a row header if any of the following > conditions are true: > > * The cell's [711]scope attribute is in the [712]row state, or > * The cell's [713]scope attribute is in the [714]auto state, the cell is > not a [715]column header, and there are no data cells in any of the > cells covering slots with x-coordinates x .. x+width-1. > > A header cell is said to be a column group header if its [716]scope > attribute is in the [717]column group state. > > A header cell is said to be a row group header if its [718]scope attribute > is in the [719]row group state. > > A cell is said to be an empty cell if it contains no elements and its text > content, if any, consists only of [720]White_Space characters. > > 4.9.13 Examples > > Status: Last call for comments > > This section is non-normative. > > The following shows how might one mark up the bottom part of table 45 of > the Smithsonian physical tables, Volume 71: > > <table> > <caption>Specification values: <b>Steel</b>, <b>Castings</b>, > Ann. A.S.T.M. A27-16, Class B;* P max. 0.06; S max. 0.05.</caption> > <thead> > <tr> > <th rowspan=2>Grade.</th> > <th rowspan=2>Yield Point.</th> > <th colspan=2>Ultimate tensile strength</th> > <th rowspan=2>Per sent elong. 50.8mm or 2 in.</th> > <th rowspan=2>Per cent reduct. area.</th> > </tr> > <tr> > <th>kg/mm<sup>2</sup></th> > <th>lb/in<sup>2</sup></th> > </tr> > </thead> > <tbody> > <tr> > <td>Hard</td> > <td>0.45 ultimate</td> > <td>56.2</td> > <td>80,000</td> > <td>15</td> > <td>20</td> > </tr> > <tr> > <td>Medium</td> > <td>0.45 ultimate</td> > <td>49.2</td> > <td>70,000</td> > <td>18</td> > <td>25</td> > </tr> > <tr> > <td>Soft</td> > <td>0.45 ultimate</td> > <td>42.2</td> > <td>60,000</td> > <td>22</td> > <td>30</td> > </tr> > </tbody> > </table> > > This table could look like this: > > Specification values: Steel, Castings, Ann. A.S.T.M. A27-16, Class B;* P > max. 0.06; S max. 0.05. > Ultimate tensile Per cent elong. 50.8 mm Per cent > Grade. Yield Point. strength or 2 in. reduct. > kg/mm^2 lb/in^2 area. > Hard 0.45 ultimate 56.2 80,000 15 20 > Medium 0.45 ultimate 49.2 70,000 18 25 > Soft 0.45 ultimate 42.2 60,000 22 30 > > > > -------------------------------------------------------------------------- > > The following shows how one might mark up the gross margin table on page > 46 of Apple, Inc's 10-K filing for fiscal year 2008: > > <table> > <thead> > <tr> > <th> > <th>2008 > <th>2007 > <th>2006 > <tbody> > <tr> > <th>Net sales > <td>$ 32,479 > <td>$ 24,006 > <td>$ 19,315 > <tr> > <th>Cost of sales > <td> 21,334 > <td> 15,852 > <td> 13,717 > <tbody> > <tr> > <th>Gross margin > <td>$ 11,145 > <td>$ 8,154 > <td>$ 5,598 > <tfoot> > <tr> > <th>Gross margin percentage > <td>34.3% > <td>34.0% > <td>29.0% > </table> > > This table could look like this: > > 2008 2007 2006 > Net sales $ 32,479 $ 24,006 $ 19,315 > Cost of sales 21,334 15,852 13,717 > Gross margin $ 11,145 $ 8,154 $ 5,598 > Gross margin percentage 34.3% 34.0% 29.0% > > -------------------------------------------------------------------------- > > The following shows how one might mark up the operating expenses table > from lower on the same page of that document: > > <table> > <colgroup> <col> > <colgroup> <col> <col> <col> > <thead> > <tr> <th> <th>2008 <th>2007 <th>2006 > <tbody> > <tr> <th scope=rowgroup> Research and development > <td> $ 1,109 <td> $ 782 <td> $ 712 > <tr> <th scope=row> Percentage of net sales > <td> 3.4% <td> 3.3% <td> 3.7% > <tbody> > <tr> <th scope=rowgroup> Selling, general, and administrative > <td> $ 3,761 <td> $ 2,963 <td> $ 2,433 > <tr> <th scope=row> Percentage of net sales > <td> 11.6% <td> 12.3% <td> 12.6% > </table> > > This table could look like this: > > 2008 2007 2006 > Research and development $ 1,109 $ 782 $ 712 > Percentage of net sales 3.4% 3.3% 3.7% > Selling, general, and administrative $ 3,761 $ 2,963 $ 2,433 > Percentage of net sales 11.6% 12.3% 12.6% > > 4.9.14 Guidance for conformance checkers > > This is proposed text and is a very open issue > > Conformance checkers must report as a warning or advisory > > * A table which is described by a summary, caption, legend or element > referenced by an aria-describedby. In this case, the advisory must > explain that summary is to be used for spatial information that will > be obvious and redundant to a visual user, while one of the other > techniques is to be used for information that would be useful to all > users. > > References > > Visible links > 1. file:///tmp/table3.html#flow-content > 2. file:///tmp/table3.html#flow-content > 3. file:///tmp/table3.html#the-caption-element > 4. file:///tmp/table3.html#the-colgroup-element > 5. file:///tmp/table3.html#the-thead-element > 6. file:///tmp/table3.html#the-tfoot-element > 7. file:///tmp/table3.html#the-tbody-element > 8. file:///tmp/table3.html#the-tr-element > 9. file:///tmp/table3.html#the-tfoot-element > 10. file:///tmp/table3.html#the-tfoot-element > 11. file:///tmp/table3.html#global-attributes > 12. file:///tmp/table3.html#attr-table-orientation > 13. file:///tmp/table3.html#attr-table-summary > 14. file:///tmp/table3.html#htmlelement > 15. file:///tmp/table3.html#htmltablecaptionelement > 16. dom-table-caption > file:///tmp/table3.html#dom-table-caption > 17. file:///tmp/table3.html#htmlelement > 18. dom-table-createCaption > file:///tmp/table3.html#dom-table-createcaption > 19. dom-table-deleteCaption > file:///tmp/table3.html#dom-table-deletecaption > 20. file:///tmp/table3.html#htmltablesectionelement > 21. dom-table-tHead > file:///tmp/table3.html#dom-table-thead > 22. file:///tmp/table3.html#htmlelement > 23. dom-table-createTHead > file:///tmp/table3.html#dom-table-createthead > 24. dom-table-deleteTHead > file:///tmp/table3.html#dom-table-deletethead > 25. file:///tmp/table3.html#htmltablesectionelement > 26. dom-table-tFoot > file:///tmp/table3.html#dom-table-tfoot > 27. file:///tmp/table3.html#htmlelement > 28. dom-table-createTFoot > file:///tmp/table3.html#dom-table-createtfoot > 29. dom-table-deleteTFoot > file:///tmp/table3.html#dom-table-deletetfoot > 30. file:///tmp/table3.html#htmlcollection > 31. dom-table-tBodies > file:///tmp/table3.html#dom-table-tbodies > 32. file:///tmp/table3.html#htmlelement > 33. dom-table-createTBody > file:///tmp/table3.html#dom-table-createtbody > 34. file:///tmp/table3.html#htmlcollection > 35. dom-table-rows > file:///tmp/table3.html#dom-table-rows > 36. file:///tmp/table3.html#htmlelement > 37. dom-table-insertRow > file:///tmp/table3.html#dom-table-insertrow > 38. dom-table-deleteRow > file:///tmp/table3.html#dom-table-deleterow > 39. dom-table-summary > file:///tmp/table3.html#dom-table-summary > 40. dom-table-orientation > file:///tmp/table3.html#dom-table-orientation > 41. file:///tmp/table3.html#the-table-element > 42. file:///tmp/table3.html#represents > 43. concept-table > file:///tmp/table3.html#concept-table > 44. file:///tmp/table3.html#the-table-element > 45. file:///tmp/table3.html#table-model > 46. file:///tmp/table3.html#table-model > 47. http://www.rfbd.org/about.htm > 48. file:///tmp/table3.html#the-caption-element > 49. file:///tmp/table3.html#the-legend-element > 50. file:///tmp/table3.html#attr-table-summary > 51. file:///tmp/table3.html#the-caption-element > 52. file:///tmp/table3.html#the-caption-element > 53. file:///tmp/table3.html#the-details-element > 54. file:///tmp/table3.html#the-figure-element > 55. file:///tmp/table3.html#the-figure-element > 56. file:///tmp/table3.html#the-dt-element > 57. file:///tmp/table3.html#attr-tdth-headers > 58. file:///tmp/table3.html#dom-table-caption > 59. file:///tmp/table3.html#the-caption-element > 60. file:///tmp/table3.html#the-caption-element > 61. file:///tmp/table3.html#the-caption-element > 62. file:///tmp/table3.html#hierarchy_request_err > 63. file:///tmp/table3.html#dom-table-createcaption > 64. file:///tmp/table3.html#the-caption-element > 65. file:///tmp/table3.html#dom-table-deletecaption > 66. file:///tmp/table3.html#the-caption-element > 67. file:///tmp/table3.html#dom-table-thead > 68. file:///tmp/table3.html#the-thead-element > 69. file:///tmp/table3.html#the-thead-element > 70. file:///tmp/table3.html#the-thead-element > 71. file:///tmp/table3.html#hierarchy_request_err > 72. file:///tmp/table3.html#dom-table-createthead > 73. file:///tmp/table3.html#the-thead-element > 74. file:///tmp/table3.html#dom-table-deletethead > 75. file:///tmp/table3.html#the-thead-element > 76. file:///tmp/table3.html#dom-table-tfoot > 77. file:///tmp/table3.html#the-tfoot-element > 78. file:///tmp/table3.html#the-tfoot-element > 79. file:///tmp/table3.html#the-tfoot-element > 80. file:///tmp/table3.html#hierarchy_request_err > 81. file:///tmp/table3.html#dom-table-createtfoot > 82. file:///tmp/table3.html#the-tfoot-element > 83. file:///tmp/table3.html#dom-table-deletetfoot > 84. file:///tmp/table3.html#the-tfoot-element > 85. file:///tmp/table3.html#dom-table-tbodies > 86. file:///tmp/table3.html#htmlcollection > 87. file:///tmp/table3.html#the-tbody-element > 88. file:///tmp/table3.html#dom-table-createtbody > 89. file:///tmp/table3.html#the-tbody-element > 90. file:///tmp/table3.html#dom-table-rows > 91. file:///tmp/table3.html#htmlcollection > 92. file:///tmp/table3.html#the-tr-element > 93. file:///tmp/table3.html#dom-table-insertrow > 94. file:///tmp/table3.html#the-tr-element > 95. file:///tmp/table3.html#the-tbody-element > 96. file:///tmp/table3.html#the-tr-element > 97. file:///tmp/table3.html#index_size_err > 98. file:///tmp/table3.html#dom-table-deleterow > 99. file:///tmp/table3.html#the-tr-element > 100. file:///tmp/table3.html#index_size_err > 101. file:///tmp/table3.html#the-caption-element > 102. file:///tmp/table3.html#the-table-element > 103. file:///tmp/table3.html#the-caption-element > 104. file:///tmp/table3.html#the-caption-element > 105. file:///tmp/table3.html#the-table-element > 106. file:///tmp/table3.html#the-table-element > 107. file:///tmp/table3.html#the-caption-element > 108. file:///tmp/table3.html#hierarchy_request_err > 109. file:///tmp/table3.html#the-caption-element > 110. file:///tmp/table3.html#the-table-element > 111. file:///tmp/table3.html#the-caption-element > 112. file:///tmp/table3.html#the-table-element > 113. file:///tmp/table3.html#the-caption-element > 114. file:///tmp/table3.html#the-table-element > 115. file:///tmp/table3.html#the-thead-element > 116. file:///tmp/table3.html#the-table-element > 117. file:///tmp/table3.html#the-thead-element > 118. file:///tmp/table3.html#the-thead-element > 119. file:///tmp/table3.html#the-table-element > 120. file:///tmp/table3.html#the-table-element > 121. file:///tmp/table3.html#the-caption-element > 122. file:///tmp/table3.html#the-colgroup-element > 123. file:///tmp/table3.html#the-thead-element > 124. file:///tmp/table3.html#hierarchy_request_err > 125. file:///tmp/table3.html#the-thead-element > 126. file:///tmp/table3.html#the-table-element > 127. file:///tmp/table3.html#the-thead-element > 128. file:///tmp/table3.html#the-table-element > 129. file:///tmp/table3.html#the-caption-element > 130. file:///tmp/table3.html#the-colgroup-element > 131. file:///tmp/table3.html#the-thead-element > 132. file:///tmp/table3.html#the-table-element > 133. file:///tmp/table3.html#the-tfoot-element > 134. file:///tmp/table3.html#the-table-element > 135. file:///tmp/table3.html#the-tfoot-element > 136. file:///tmp/table3.html#the-tfoot-element > 137. file:///tmp/table3.html#the-table-element > 138. file:///tmp/table3.html#the-table-element > 139. file:///tmp/table3.html#the-caption-element > 140. file:///tmp/table3.html#the-colgroup-element > 141. file:///tmp/table3.html#the-thead-element > 142. file:///tmp/table3.html#the-tfoot-element > 143. file:///tmp/table3.html#hierarchy_request_err > 144. file:///tmp/table3.html#the-tfoot-element > 145. file:///tmp/table3.html#the-table-element > 146. file:///tmp/table3.html#the-tfoot-element > 147. file:///tmp/table3.html#the-table-element > 148. file:///tmp/table3.html#the-caption-element > 149. file:///tmp/table3.html#the-colgroup-element > 150. file:///tmp/table3.html#the-thead-element > 151. file:///tmp/table3.html#the-tfoot-element > 152. file:///tmp/table3.html#the-table-element > 153. file:///tmp/table3.html#htmlcollection > 154. file:///tmp/table3.html#the-table-element > 155. file:///tmp/table3.html#the-tbody-element > 156. file:///tmp/table3.html#the-table-element > 157. file:///tmp/table3.html#the-tbody-element > 158. file:///tmp/table3.html#the-tbody-element > 159. file:///tmp/table3.html#the-table-element > 160. file:///tmp/table3.html#the-table-element > 161. file:///tmp/table3.html#the-table-element > 162. file:///tmp/table3.html#the-tbody-element > 163. file:///tmp/table3.html#the-tbody-element > 164. file:///tmp/table3.html#htmlcollection > 165. file:///tmp/table3.html#the-table-element > 166. file:///tmp/table3.html#the-tr-element > 167. file:///tmp/table3.html#the-table-element > 168. file:///tmp/table3.html#the-thead-element > 169. file:///tmp/table3.html#the-tbody-element > 170. file:///tmp/table3.html#the-tfoot-element > 171. file:///tmp/table3.html#the-table-element > 172. file:///tmp/table3.html#the-thead-element > 173. file:///tmp/table3.html#the-table-element > 174. file:///tmp/table3.html#the-tbody-element > 175. file:///tmp/table3.html#the-tfoot-element > 176. file:///tmp/table3.html#dom-table-rows > 177. file:///tmp/table3.html#index_size_err > 178. file:///tmp/table3.html#dom-table-rows > 179. file:///tmp/table3.html#the-table-element > 180. file:///tmp/table3.html#the-tbody-element > 181. file:///tmp/table3.html#the-tbody-element > 182. file:///tmp/table3.html#the-tr-element > 183. file:///tmp/table3.html#the-tr-element > 184. file:///tmp/table3.html#the-tbody-element > 185. file:///tmp/table3.html#the-tbody-element > 186. file:///tmp/table3.html#the-table-element > 187. file:///tmp/table3.html#the-tr-element > 188. file:///tmp/table3.html#dom-table-rows > 189. file:///tmp/table3.html#the-tr-element > 190. file:///tmp/table3.html#the-tbody-element > 191. file:///tmp/table3.html#the-tr-element > 192. file:///tmp/table3.html#dom-table-rows > 193. file:///tmp/table3.html#the-tr-element > 194. file:///tmp/table3.html#the-tr-element > 195. file:///tmp/table3.html#dom-table-rows > 196. file:///tmp/table3.html#the-tr-element > 197. file:///tmp/table3.html#the-tr-element > 198. file:///tmp/table3.html#the-tr-element > 199. file:///tmp/table3.html#dom-table-rows > 200. file:///tmp/table3.html#the-tr-element > 201. file:///tmp/table3.html#dom-table-rows > 202. file:///tmp/table3.html#dom-table-rows > 203. file:///tmp/table3.html#index_size_err > 204. file:///tmp/table3.html#dom-table-rows > 205. file:///tmp/table3.html#reflect > 206. file:///tmp/table3.html#reflect > 207. file:///tmp/table3.html#the-table-element > 208. file:///tmp/table3.html#flow-content > 209. file:///tmp/table3.html#the-table-element > 210. file:///tmp/table3.html#global-attributes > 211. file:///tmp/table3.html#htmlelement > 212. file:///tmp/table3.html#the-caption-element > 213. file:///tmp/table3.html#represents > 214. file:///tmp/table3.html#the-table-element > 215. file:///tmp/table3.html#the-table-element > 216. file:///tmp/table3.html#the-caption-element > 217. file:///tmp/table3.html#table-model > 218. file:///tmp/table3.html#the-table-element > 219. file:///tmp/table3.html#the-figure-element > 220. file:///tmp/table3.html#the-dd-element > 221. file:///tmp/table3.html#the-caption-element > 222. file:///tmp/table3.html#the-dt-element > 223. file:///tmp/table3.html#the-table-element > 224. file:///tmp/table3.html#the-caption-element > 225. file:///tmp/table3.html#the-thead-element > 226. file:///tmp/table3.html#the-tbody-element > 227. file:///tmp/table3.html#the-tfoot-element > 228. file:///tmp/table3.html#the-tr-element > 229. file:///tmp/table3.html#the-col-element > 230. file:///tmp/table3.html#global-attributes > 231. file:///tmp/table3.html#attr-colgroup-span > 232. file:///tmp/table3.html#htmlelement > 233. dom-colgroup-span > file:///tmp/table3.html#dom-colgroup-span > 234. file:///tmp/table3.html#the-colgroup-element > 235. file:///tmp/table3.html#represents > 236. concept-column-group > file:///tmp/table3.html#concept-column-group > 237. concept-column > file:///tmp/table3.html#concept-column > 238. file:///tmp/table3.html#the-table-element > 239. file:///tmp/table3.html#the-table-element > 240. file:///tmp/table3.html#the-colgroup-element > 241. file:///tmp/table3.html#the-col-element > 242. file:///tmp/table3.html#valid-non-negative-integer > 243. file:///tmp/table3.html#the-colgroup-element > 244. file:///tmp/table3.html#attr-colgroup-span > 245. file:///tmp/table3.html#table-model > 246. file:///tmp/table3.html#reflect > 247. file:///tmp/table3.html#limited-to-only-non-negative-numbers-greater-than-zero > 248. file:///tmp/table3.html#the-colgroup-element > 249. file:///tmp/table3.html#attr-col-span > 250. file:///tmp/table3.html#global-attributes > 251. file:///tmp/table3.html#attr-col-span > 252. file:///tmp/table3.html#htmltablecolelement > 253. file:///tmp/table3.html#the-colgroup-element > 254. file:///tmp/table3.html#dom-col-span > 255. file:///tmp/table3.html#the-col-element > 256. file:///tmp/table3.html#the-colgroup-element > 257. file:///tmp/table3.html#the-table-element > 258. file:///tmp/table3.html#the-col-element > 259. file:///tmp/table3.html#represents > 260. concept-column > file:///tmp/table3.html#concept-column > 261. concept-column-group > file:///tmp/table3.html#concept-column-group > 262. file:///tmp/table3.html#the-colgroup-element > 263. file:///tmp/table3.html#valid-non-negative-integer > 264. file:///tmp/table3.html#the-col-element > 265. file:///tmp/table3.html#attr-col-span > 266. file:///tmp/table3.html#table-model > 267. file:///tmp/table3.html#reflect > 268. file:///tmp/table3.html#limited-to-only-non-negative-numbers-greater-than-zero > 269. file:///tmp/table3.html#the-table-element > 270. file:///tmp/table3.html#the-caption-element > 271. file:///tmp/table3.html#the-colgroup-element > 272. file:///tmp/table3.html#the-thead-element > 273. file:///tmp/table3.html#the-tr-element > 274. file:///tmp/table3.html#the-table-element > 275. file:///tmp/table3.html#the-tr-element > 276. file:///tmp/table3.html#global-attributes > 277. file:///tmp/table3.html#htmlelement > 278. file:///tmp/table3.html#htmlcollection > 279. dom-tbody-rows > file:///tmp/table3.html#dom-tbody-rows > 280. file:///tmp/table3.html#htmlelement > 281. dom-tbody-insertRow > file:///tmp/table3.html#dom-tbody-insertrow > 282. dom-tbody-deleteRow > file:///tmp/table3.html#dom-tbody-deleterow > 283. file:///tmp/table3.html#htmltablesectionelement > 284. file:///tmp/table3.html#the-thead-element > 285. file:///tmp/table3.html#the-tfoot-element > 286. file:///tmp/table3.html#the-tbody-element > 287. file:///tmp/table3.html#represents > 288. concept-row-group > file:///tmp/table3.html#concept-row-group > 289. concept-row > file:///tmp/table3.html#concept-row > 290. file:///tmp/table3.html#the-table-element > 291. file:///tmp/table3.html#the-tbody-element > 292. file:///tmp/table3.html#the-table-element > 293. file:///tmp/table3.html#the-tbody-element > 294. file:///tmp/table3.html#table-model > 295. file:///tmp/table3.html#dom-tbody-rows > 296. file:///tmp/table3.html#htmlcollection > 297. file:///tmp/table3.html#the-tr-element > 298. file:///tmp/table3.html#dom-tbody-insertrow > 299. file:///tmp/table3.html#the-tr-element > 300. file:///tmp/table3.html#the-tr-element > 301. file:///tmp/table3.html#index_size_err > 302. file:///tmp/table3.html#dom-tbody-deleterow > 303. file:///tmp/table3.html#the-tr-element > 304. file:///tmp/table3.html#index_size_err > 305. file:///tmp/table3.html#htmlcollection > 306. file:///tmp/table3.html#the-tr-element > 307. file:///tmp/table3.html#dom-tbody-rows > 308. file:///tmp/table3.html#index_size_err > 309. file:///tmp/table3.html#dom-tbody-rows > 310. file:///tmp/table3.html#the-tr-element > 311. file:///tmp/table3.html#the-tr-element > 312. file:///tmp/table3.html#the-tr-element > 313. file:///tmp/table3.html#the-tr-element > 314. file:///tmp/table3.html#dom-tbody-rows > 315. file:///tmp/table3.html#the-tr-element > 316. file:///tmp/table3.html#dom-tbody-rows > 317. file:///tmp/table3.html#dom-tbody-rows > 318. file:///tmp/table3.html#index_size_err > 319. file:///tmp/table3.html#the-table-element > 320. file:///tmp/table3.html#the-caption-element > 321. file:///tmp/table3.html#the-colgroup-element > 322. file:///tmp/table3.html#the-tbody-element > 323. file:///tmp/table3.html#the-tfoot-element > 324. file:///tmp/table3.html#the-tr-element > 325. file:///tmp/table3.html#the-thead-element > 326. file:///tmp/table3.html#the-table-element > 327. file:///tmp/table3.html#the-tr-element > 328. file:///tmp/table3.html#global-attributes > 329. file:///tmp/table3.html#htmltablesectionelement > 330. file:///tmp/table3.html#the-tbody-element > 331. file:///tmp/table3.html#the-thead-element > 332. file:///tmp/table3.html#represents > 333. concept-row-group > file:///tmp/table3.html#concept-row-group > 334. concept-row > file:///tmp/table3.html#concept-row > 335. file:///tmp/table3.html#the-table-element > 336. file:///tmp/table3.html#the-thead-element > 337. file:///tmp/table3.html#the-table-element > 338. file:///tmp/table3.html#the-thead-element > 339. file:///tmp/table3.html#table-model > 340. file:///tmp/table3.html#the-table-element > 341. file:///tmp/table3.html#the-caption-element > 342. file:///tmp/table3.html#the-colgroup-element > 343. file:///tmp/table3.html#the-thead-element > 344. file:///tmp/table3.html#the-tbody-element > 345. file:///tmp/table3.html#the-tr-element > 346. file:///tmp/table3.html#the-tfoot-element > 347. file:///tmp/table3.html#the-table-element > 348. file:///tmp/table3.html#the-table-element > 349. file:///tmp/table3.html#the-caption-element > 350. file:///tmp/table3.html#the-colgroup-element > 351. file:///tmp/table3.html#the-thead-element > 352. file:///tmp/table3.html#the-tbody-element > 353. file:///tmp/table3.html#the-tr-element > 354. file:///tmp/table3.html#the-tfoot-element > 355. file:///tmp/table3.html#the-table-element > 356. file:///tmp/table3.html#the-tr-element > 357. file:///tmp/table3.html#global-attributes > 358. file:///tmp/table3.html#htmltablesectionelement > 359. file:///tmp/table3.html#the-tbody-element > 360. file:///tmp/table3.html#the-tfoot-element > 361. file:///tmp/table3.html#represents > 362. concept-row-group > file:///tmp/table3.html#concept-row-group > 363. concept-row > file:///tmp/table3.html#concept-row > 364. file:///tmp/table3.html#the-table-element > 365. file:///tmp/table3.html#the-tfoot-element > 366. file:///tmp/table3.html#the-table-element > 367. file:///tmp/table3.html#the-tfoot-element > 368. file:///tmp/table3.html#table-model > 369. file:///tmp/table3.html#the-thead-element > 370. file:///tmp/table3.html#the-tbody-element > 371. file:///tmp/table3.html#the-tfoot-element > 372. file:///tmp/table3.html#the-table-element > 373. file:///tmp/table3.html#the-caption-element > 374. file:///tmp/table3.html#the-colgroup-element > 375. file:///tmp/table3.html#the-thead-element > 376. file:///tmp/table3.html#the-tbody-element > 377. file:///tmp/table3.html#the-table-element > 378. file:///tmp/table3.html#the-thead-element > 379. file:///tmp/table3.html#the-th-element > 380. file:///tmp/table3.html#the-td-element > 381. file:///tmp/table3.html#the-th-element > 382. file:///tmp/table3.html#global-attributes > 383. file:///tmp/table3.html#htmlelement > 384. dom-tr-rowIndex > file:///tmp/table3.html#dom-tr-rowindex > 385. dom-tr-sectionRowIndex > file:///tmp/table3.html#dom-tr-sectionrowindex > 386. file:///tmp/table3.html#htmlcollection > 387. dom-tr-cells > file:///tmp/table3.html#dom-tr-cells > 388. file:///tmp/table3.html#htmlelement > 389. dom-tr-insertCell > file:///tmp/table3.html#dom-tr-insertcell > 390. dom-tr-deleteCell > file:///tmp/table3.html#dom-tr-deletecell > 391. file:///tmp/table3.html#the-tr-element > 392. file:///tmp/table3.html#represents > 393. concept-row > file:///tmp/table3.html#concept-row > 394. concept-cell > file:///tmp/table3.html#concept-cell > 395. concept-table > file:///tmp/table3.html#concept-table > 396. file:///tmp/table3.html#the-tr-element > 397. file:///tmp/table3.html#table-model > 398. file:///tmp/table3.html#dom-tr-rowindex > 399. file:///tmp/table3.html#dom-table-rows > 400. file:///tmp/table3.html#dom-tr-sectionrowindex > 401. file:///tmp/table3.html#dom-tbody-rows > 402. file:///tmp/table3.html#dom-tr-cells > 403. file:///tmp/table3.html#htmlcollection > 404. file:///tmp/table3.html#the-td-element > 405. file:///tmp/table3.html#the-th-element > 406. file:///tmp/table3.html#dom-tr-insertcell > 407. file:///tmp/table3.html#the-td-element > 408. file:///tmp/table3.html#the-td-element > 409. file:///tmp/table3.html#index_size_err > 410. file:///tmp/table3.html#dom-tr-deletecell > 411. file:///tmp/table3.html#the-td-element > 412. file:///tmp/table3.html#the-th-element > 413. file:///tmp/table3.html#index_size_err > 414. file:///tmp/table3.html#the-table-element > 415. file:///tmp/table3.html#the-tbody-element > 416. file:///tmp/table3.html#the-thead-element > 417. file:///tmp/table3.html#the-tfoot-element > 418. file:///tmp/table3.html#the-table-element > 419. file:///tmp/table3.html#the-tr-element > 420. file:///tmp/table3.html#the-table-element > 421. file:///tmp/table3.html#dom-table-rows > 422. file:///tmp/table3.html#the-table-element > 423. file:///tmp/table3.html#the-table-element > 424. file:///tmp/table3.html#the-tbody-element > 425. file:///tmp/table3.html#the-thead-element > 426. file:///tmp/table3.html#the-tfoot-element > 427. file:///tmp/table3.html#the-tr-element > 428. file:///tmp/table3.html#dom-table-rows > 429. file:///tmp/table3.html#dom-tbody-rows > 430. file:///tmp/table3.html#htmlcollection > 431. file:///tmp/table3.html#the-tr-element > 432. file:///tmp/table3.html#the-td-element > 433. file:///tmp/table3.html#the-th-element > 434. file:///tmp/table3.html#the-tr-element > 435. file:///tmp/table3.html#dom-tr-cells > 436. file:///tmp/table3.html#index_size_err > 437. file:///tmp/table3.html#dom-tr-cells > 438. file:///tmp/table3.html#the-td-element > 439. file:///tmp/table3.html#the-tr-element > 440. file:///tmp/table3.html#the-td-element > 441. file:///tmp/table3.html#the-td-element > 442. file:///tmp/table3.html#the-tr-element > 443. file:///tmp/table3.html#the-td-element > 444. file:///tmp/table3.html#the-th-element > 445. file:///tmp/table3.html#dom-tr-cells > 446. file:///tmp/table3.html#the-td-element > 447. file:///tmp/table3.html#dom-tr-cells > 448. file:///tmp/table3.html#dom-tr-cells > 449. file:///tmp/table3.html#index_size_err > 450. file:///tmp/table3.html#sectioning-root > 451. file:///tmp/table3.html#the-tr-element > 452. file:///tmp/table3.html#flow-content > 453. file:///tmp/table3.html#global-attributes > 454. file:///tmp/table3.html#attr-tdth-colspan > 455. file:///tmp/table3.html#attr-tdth-rowspan > 456. file:///tmp/table3.html#attr-tdth-headers > 457. file:///tmp/table3.html#htmltablecellelement > 458. file:///tmp/table3.html#the-td-element > 459. file:///tmp/table3.html#represents > 460. concept-cell > file:///tmp/table3.html#concept-cell > 461. file:///tmp/table3.html#the-td-element > 462. file:///tmp/table3.html#attr-tdth-colspan > 463. file:///tmp/table3.html#attr-tdth-rowspan > 464. file:///tmp/table3.html#attr-tdth-headers > 465. file:///tmp/table3.html#table-model > 466. file:///tmp/table3.html#the-tr-element > 467. file:///tmp/table3.html#phrasing-content > 468. file:///tmp/table3.html#global-attributes > 469. file:///tmp/table3.html#attr-tdth-colspan > 470. file:///tmp/table3.html#attr-tdth-rowspan > 471. file:///tmp/table3.html#attr-tdth-headers > 472. file:///tmp/table3.html#attr-th-scope > 473. file:///tmp/table3.html#htmltablecellelement > 474. dom-th-scope > file:///tmp/table3.html#dom-th-scope > 475. file:///tmp/table3.html#the-th-element > 476. file:///tmp/table3.html#represents > 477. concept-cell > file:///tmp/table3.html#concept-cell > 478. file:///tmp/table3.html#the-th-element > 479. file:///tmp/table3.html#attr-th-scope > 480. file:///tmp/table3.html#enumerated-attribute > 481. file:///tmp/table3.html#the-th-element > 482. file:///tmp/table3.html#attr-th-scope > 483. attr-th-scope-rowgroup > file:///tmp/table3.html#attr-th-scope-rowgroup > 484. concept-row-group > file:///tmp/table3.html#concept-row-group > 485. file:///tmp/table3.html#the-th-element > 486. file:///tmp/table3.html#attr-th-scope > 487. attr-th-scope-colgroup > file:///tmp/table3.html#attr-th-scope-colgroup > 488. concept-column-group > file:///tmp/table3.html#concept-column-group > 489. file:///tmp/table3.html#attr-th-scope > 490. file:///tmp/table3.html#the-th-element > 491. file:///tmp/table3.html#attr-tdth-colspan > 492. file:///tmp/table3.html#attr-tdth-rowspan > 493. file:///tmp/table3.html#attr-tdth-headers > 494. file:///tmp/table3.html#attr-th-scope > 495. file:///tmp/table3.html#table-model > 496. file:///tmp/table3.html#reflect > 497. file:///tmp/table3.html#attr-th-scope > 498. file:///tmp/table3.html#attr-th-scope-rowgroup > 499. file:///tmp/table3.html#attr-th-scope > 500. file:///tmp/table3.html#the-td-element > 501. file:///tmp/table3.html#the-th-element > 502. file:///tmp/table3.html#the-td-element > 503. file:///tmp/table3.html#the-th-element > 504. file:///tmp/table3.html#valid-non-negative-integer > 505. file:///tmp/table3.html#the-td-element > 506. file:///tmp/table3.html#the-th-element > 507. file:///tmp/table3.html#valid-non-negative-integer > 508. file:///tmp/table3.html#table-model > 509. file:///tmp/table3.html#the-td-element > 510. file:///tmp/table3.html#the-th-element > 511. file:///tmp/table3.html#attr-tdth-headers > 512. file:///tmp/table3.html#unordered-set-of-unique-space-separated-tokens > 513. file:///tmp/table3.html#the-th-element > 514. concept-table > file:///tmp/table3.html#concept-table > 515. file:///tmp/table3.html#the-td-element > 516. file:///tmp/table3.html#the-th-element > 517. file:///tmp/table3.html#table-model > 518. file:///tmp/table3.html#the-th-element > 519. file:///tmp/table3.html#the-td-element > 520. file:///tmp/table3.html#the-th-element > 521. concept-table > file:///tmp/table3.html#concept-table > 522. file:///tmp/table3.html#attr-tdth-headers > 523. file:///tmp/table3.html#the-th-element > 524. file:///tmp/table3.html#the-th-element > 525. file:///tmp/table3.html#the-td-element > 526. file:///tmp/table3.html#the-th-element > 527. file:///tmp/table3.html#attr-tdth-colspan > 528. file:///tmp/table3.html#attr-tdth-rowspan > 529. file:///tmp/table3.html#attr-tdth-headers > 530. file:///tmp/table3.html#table-model > 531. file:///tmp/table3.html#the-td-element > 532. file:///tmp/table3.html#the-th-element > 533. file:///tmp/table3.html#htmltablecellelement > 534. file:///tmp/table3.html#htmlelement > 535. dom-tdth-colSpan > file:///tmp/table3.html#dom-tdth-colspan > 536. dom-tdth-rowSpan > file:///tmp/table3.html#dom-tdth-rowspan > 537. dom-tdth-headers > file:///tmp/table3.html#dom-tdth-headers > 538. dom-tdth-cellIndex > file:///tmp/table3.html#dom-tdth-cellindex > 539. file:///tmp/table3.html#dom-tdth-cellindex > 540. file:///tmp/table3.html#dom-tr-cells > 541. file:///tmp/table3.html#reflect > 542. file:///tmp/table3.html#limited-to-only-non-negative-numbers-greater-than-zero > 543. file:///tmp/table3.html#reflect > 544. rules for parsing non-negative integers > file:///tmp/table3.html#rules-for-parsing-non-negative-integers > 545. file:///tmp/table3.html#reflect > 546. file:///tmp/table3.html#the-tr-element > 547. file:///tmp/table3.html#dom-tr-cells > 548. file:///tmp/table3.html#the-table-element > 549. file:///tmp/table3.html#the-td-element > 550. file:///tmp/table3.html#the-th-element > 551. file:///tmp/table3.html#the-tr-element > 552. file:///tmp/table3.html#the-col-element > 553. file:///tmp/table3.html#the-col-element > 554. concept-row > file:///tmp/table3.html#concept-row > 555. file:///tmp/table3.html#the-tbody-element > 556. file:///tmp/table3.html#the-thead-element > 557. file:///tmp/table3.html#the-tfoot-element > 558. concept-column > file:///tmp/table3.html#concept-column > 559. file:///tmp/table3.html#the-colgroup-element > 560. concept-row-group > file:///tmp/table3.html#concept-row-group > 561. concept-column-group > file:///tmp/table3.html#concept-column-group > 562. concept-cell > file:///tmp/table3.html#concept-cell > 563. concept-row-group > file:///tmp/table3.html#concept-row-group > 564. concept-column-group > file:///tmp/table3.html#concept-column-group > 565. concept-row-group > file:///tmp/table3.html#concept-row-group > 566. concept-column-group > file:///tmp/table3.html#concept-column-group > 567. concept-cell > file:///tmp/table3.html#concept-cell > 568. concept-column > file:///tmp/table3.html#concept-column > 569. concept-row > file:///tmp/table3.html#concept-row > 570. concept-row-group > file:///tmp/table3.html#concept-row-group > 571. concept-column-group > file:///tmp/table3.html#concept-column-group > 572. concept-table > file:///tmp/table3.html#concept-table > 573. file:///tmp/table3.html#the-caption-element > 574. file:///tmp/table3.html#the-table-element > 575. concept-table > file:///tmp/table3.html#concept-table > 576. file:///tmp/table3.html#the-table-element > 577. table model error > file:///tmp/table3.html#table-model-error > 578. file:///tmp/table3.html#the-tfoot-element > 579. file:///tmp/table3.html#the-tfoot-element > 580. concept-table > file:///tmp/table3.html#concept-table > 581. file:///tmp/table3.html#the-table-element > 582. file:///tmp/table3.html#the-table-element > 583. file:///tmp/table3.html#the-caption-element > 584. file:///tmp/table3.html#the-table-element > 585. file:///tmp/table3.html#the-caption-element > 586. file:///tmp/table3.html#the-table-element > 587. concept-table-advance > file:///tmp/table3.html#concept-table-advance > 588. file:///tmp/table3.html#the-table-element > 589. file:///tmp/table3.html#the-colgroup-element > 590. file:///tmp/table3.html#the-thead-element > 591. file:///tmp/table3.html#the-tbody-element > 592. file:///tmp/table3.html#the-tfoot-element > 593. file:///tmp/table3.html#the-tr-element > 594. file:///tmp/table3.html#the-colgroup-element > 595. file:///tmp/table3.html#the-col-element > 596. file:///tmp/table3.html#the-col-element > 597. file:///tmp/table3.html#the-colgroup-element > 598. file:///tmp/table3.html#the-col-element > 599. file:///tmp/table3.html#attr-col-span > 600. file:///tmp/table3.html#rules-for-parsing-non-negative-integers > 601. file:///tmp/table3.html#the-col-element > 602. file:///tmp/table3.html#attr-col-span > 603. concept-column > file:///tmp/table3.html#concept-column > 604. file:///tmp/table3.html#the-col-element > 605. file:///tmp/table3.html#the-col-element > 606. file:///tmp/table3.html#the-colgroup-element > 607. file:///tmp/table3.html#the-col-element > 608. file:///tmp/table3.html#the-colgroup-element > 609. concept-column > file:///tmp/table3.html#concept-column > 610. concept-column-group > file:///tmp/table3.html#concept-column-group > 611. file:///tmp/table3.html#the-colgroup-element > 612. file:///tmp/table3.html#the-col-element > 613. file:///tmp/table3.html#the-colgroup-element > 614. file:///tmp/table3.html#attr-colgroup-span > 615. file:///tmp/table3.html#rules-for-parsing-non-negative-integers > 616. file:///tmp/table3.html#the-colgroup-element > 617. file:///tmp/table3.html#attr-colgroup-span > 618. concept-column > file:///tmp/table3.html#concept-column > 619. concept-column-group > file:///tmp/table3.html#concept-column-group > 620. file:///tmp/table3.html#the-colgroup-element > 621. concept-table-advance > file:///tmp/table3.html#concept-table-advance > 622. file:///tmp/table3.html#the-table-element > 623. concept-table-advance > file:///tmp/table3.html#concept-table-advance > 624. file:///tmp/table3.html#the-table-element > 625. file:///tmp/table3.html#the-colgroup-element > 626. file:///tmp/table3.html#the-thead-element > 627. file:///tmp/table3.html#the-tbody-element > 628. file:///tmp/table3.html#the-tfoot-element > 629. file:///tmp/table3.html#the-tr-element > 630. file:///tmp/table3.html#the-colgroup-element > 631. concept-table-advance > file:///tmp/table3.html#concept-table-advance > 632. file:///tmp/table3.html#the-table-element > 633. file:///tmp/table3.html#the-thead-element > 634. file:///tmp/table3.html#the-tbody-element > 635. file:///tmp/table3.html#the-tfoot-element > 636. file:///tmp/table3.html#the-tr-element > 637. file:///tmp/table3.html#the-tr-element > 638. file:///tmp/table3.html#algorithm-for-processing-rows > 639. concept-table-advance > file:///tmp/table3.html#concept-table-advance > 640. file:///tmp/table3.html#the-table-element > 641. file:///tmp/table3.html#algorithm-for-ending-a-row-group > 642. file:///tmp/table3.html#the-tfoot-element > 643. file:///tmp/table3.html#the-tfoot-element > 644. concept-table-advance > file:///tmp/table3.html#concept-table-advance > 645. file:///tmp/table3.html#the-table-element > 646. file:///tmp/table3.html#the-thead-element > 647. file:///tmp/table3.html#the-tbody-element > 648. file:///tmp/table3.html#algorithm-for-processing-row-groups > 649. concept-table-advance > file:///tmp/table3.html#concept-table-advance > 650. file:///tmp/table3.html#the-table-element > 651. file:///tmp/table3.html#the-tfoot-element > 652. file:///tmp/table3.html#the-tfoot-element > 653. file:///tmp/table3.html#algorithm-for-processing-row-groups > 654. concept-row > file:///tmp/table3.html#concept-row > 655. concept-column > file:///tmp/table3.html#concept-column > 656. concept-table > file:///tmp/table3.html#concept-table > 657. concept-slots > file:///tmp/table3.html#concept-slots > 658. concept-cell > file:///tmp/table3.html#concept-cell > 659. file:///tmp/table3.html#table-model-error > 660. file:///tmp/table3.html#the-thead-element > 661. file:///tmp/table3.html#the-tbody-element > 662. file:///tmp/table3.html#the-tfoot-element > 663. file:///tmp/table3.html#the-tr-element > 664. file:///tmp/table3.html#algorithm-for-processing-rows > 665. concept-row > file:///tmp/table3.html#concept-row > 666. concept-row-group > file:///tmp/table3.html#concept-row-group > 667. file:///tmp/table3.html#algorithm-for-ending-a-row-group > 668. file:///tmp/table3.html#algorithm-for-growing-downward-growing-cells > 669. file:///tmp/table3.html#the-tr-element > 670. file:///tmp/table3.html#algorithm-for-growing-downward-growing-cells > 671. file:///tmp/table3.html#the-tr-element > 672. file:///tmp/table3.html#the-td-element > 673. file:///tmp/table3.html#the-th-element > 674. file:///tmp/table3.html#the-td-element > 675. file:///tmp/table3.html#the-th-element > 676. file:///tmp/table3.html#the-tr-element > 677. file:///tmp/table3.html#attr-tdth-colspan > 678. rules for parsing non-negative integers > file:///tmp/table3.html#rules-for-parsing-non-negative-integers > 679. file:///tmp/table3.html#attr-tdth-rowspan > 680. rules for parsing non-negative integers > file:///tmp/table3.html#rules-for-parsing-non-negative-integers > 681. concept-cell > file:///tmp/table3.html#concept-cell > 682. file:///tmp/table3.html#the-th-element > 683. file:///tmp/table3.html#algorithm-for-assigning-header-cells > 684. concept-cell > file:///tmp/table3.html#concept-cell > 685. file:///tmp/table3.html#table-model-error > 686. file:///tmp/table3.html#the-td-element > 687. file:///tmp/table3.html#the-th-element > 688. file:///tmp/table3.html#the-tr-element > 689. file:///tmp/table3.html#the-td-element > 690. file:///tmp/table3.html#the-th-element > 691. file:///tmp/table3.html#the-tr-element > 692. concept-cell > file:///tmp/table3.html#concept-cell > 693. file:///tmp/table3.html#attr-tdth-headers > 694. file:///tmp/table3.html#attr-tdth-headers > 695. split a string on spaces > file:///tmp/table3.html#split-a-string-on-spaces > 696. concept-table > file:///tmp/table3.html#concept-table > 697. file:///tmp/table3.html#attr-tdth-headers > 698. file:///tmp/table3.html#internal-algorithm-for-scanning-and-assigning-header-cells > 699. file:///tmp/table3.html#internal-algorithm-for-scanning-and-assigning-header-cells > 700. concept-row-group > file:///tmp/table3.html#concept-row-group > 701. row group header > file:///tmp/table3.html#row-group-header > 702. concept-column-group > file:///tmp/table3.html#concept-column-group > 703. column group header > file:///tmp/table3.html#column-group-header > 704. empty cell > file:///tmp/table3.html#empty-cell > 705. file:///tmp/table3.html#column-header > 706. file:///tmp/table3.html#row-header > 707. file:///tmp/table3.html#attr-th-scope > 708. attr-th-scope-col > file:///tmp/table3.html#attr-th-scope-col > 709. file:///tmp/table3.html#attr-th-scope > 710. attr-th-scope-auto > file:///tmp/table3.html#attr-th-scope-auto > 711. file:///tmp/table3.html#attr-th-scope > 712. attr-th-scope-row > file:///tmp/table3.html#attr-th-scope-row > 713. file:///tmp/table3.html#attr-th-scope > 714. attr-th-scope-auto > file:///tmp/table3.html#attr-th-scope-auto > 715. file:///tmp/table3.html#column-header > 716. file:///tmp/table3.html#attr-th-scope > 717. attr-th-scope-colgroup > file:///tmp/table3.html#attr-th-scope-colgroup > 718. file:///tmp/table3.html#attr-th-scope > 719. attr-th-scope-rowgroup > file:///tmp/table3.html#attr-th-scope-rowgroup > 720. file:///tmp/table3.html#white_space -- Michael(tm) Smith http://people.w3.org/mike/
Received on Thursday, 14 January 2010 08:52:03 UTC