请帮助我解决this验证错误。我无法理解这意味着什么,或者我的 HTML 不符合标准。
我将在这里重新发布它,因为希望我能修复它并且该链接将不再有效:
由元素 td 建立的表第 2 列没有以该列开头的单元格。
…="tooltip_table"><tr><td colspan="2">20 yd range</td></tr><tr><td colspan="2"
↑
当您说
colspan="2"
时,该列应该横跨两列。我的猜测是,在能力中的其他任何地方都没有定义第二列,因此使得 colspan="2"
不可能(并且不必要)。
我在spec中找不到任何明确说明这是非法的。也许该规范中引用的表计算算法与 4.01 不同,但在我的时区尝试解决该问题为时已晚:)
但是,我发现该错误消息非常有意义,不可能是一个彻底的错误。
由元素 td 建立的表第 2 列没有以它开头的单元格。
通过使用
colspan="2"
,您暗示存在第二列,但在这种情况下不存在。常识告诉我,唠叨是正确的。
也许有人可以阐明这一点......或者它确实是一个错误。
HTML 5.2 草案:第 4.9.12.1 节形成表格
http://w3c.github.io/html/tabular-data.html#forming-a-table
步骤 22:如果表中存在仅包含没有锚定单元格的槽的行或列,则这是表模型错误。
我相信这是一个错误,并且仍未修复。考虑此示例页面并通过 W3C 验证器运行它。它给出错误“由元素 td 建立的表列 3 没有从其中开始的单元格。”,但每个表都有 4 个单元格/列,并且在第二个单元格上调用 2 的“colspan”。
看起来像是 HTML5 验证器的问题。 如果您使用 HTML 4.01 Transitional 进行验证,则不会出现该错误,并且表 html 在 html5 中没有发生太大变化。
举报可能是个好主意
我在动态创建的表上遇到了同样的错误。根据输入,某些行会显示或不显示。像这样:
不会导致错误:
<table>
<tr>
<td> cell 1 in row 1 </td>
<td> cell 2 in row 1 </td>
</tr>
<tr>
<td colspan=2> one cell in row 2 </td>
</tr>
</table>
不会导致错误:
<table>
<tr>
<td> cell 1 in row 1 </td>
<td> cell 2 in row 1 </td>
</tr>
</table>
导致错误:
<table>
<tr>
<td colspan=2> one cell in what is now the only row </td>
</tr>
</table>
一旦我对页面进行编程以在第一行未显示时删除上一个示例中的列跨度,错误就消失了。像这样的东西:
<?php if (first row with two cells is displayed) echo 'colspan=2'; ?>
我觉得这是合乎逻辑的。 colspan=2 仅包含单个单元格,就像告诉来访的人在没有任何路口的街道上右转,并相信他们会继续直行。他们不会。相反,他们会沉迷于寻找不存在的东西。也许不是一个完全准确的类比,但您可以想象一个愚蠢的浏览器在查找您告诉它存在但实际上不存在的内容时会创建显示错误。不应该期望浏览器“认为”您的代码的含义可能与您编写代码的方式不同。
只是修复 Alohci 答案的链接。
https://w3c.github.io/html/single-page.html#forming-a-table
如果您启动表 - 它会修复验证列错误。 如果您的表有 8 列,那么第一行必须有 8 个元素,如果您只是开始使用,则您不希望看到这些元素。 CSS 元素是: tr.Init{边框:无;} 以及以下 8 列表格的第一行。 结果是 - 您看不到第一行,并且您的验证错误已修复。