哪些DOM元素可以成为tr的子元素?

时间:2012-09-28 06:30:07

标签: html dom

我遇到问题,因为我想在td内围绕一些tr,所以我需要知道。

哪些DOM元素可以成为tr的子元素? (我知道div不能。)

4 个答案:

答案 0 :(得分:11)

W3C指定这个东西。对于tr,您可以找到它here。基本上,只有thtd元素可以是直接 tr的内容。

如果您希望表格中包含其他内容,则必须在内部 tdth元素。例如,td可以包含流元素,包括div

答案 1 :(得分:4)

The HTML spec州:

  

允许的内容

     

零个或多个:一个td元素或一个th元素

<tr>个元素只能包含 <{em> <td><th> s。

答案 2 :(得分:1)

这种情况与ul的情况非常相似,我在Can we use any other TAG inside <ul> along with <li>?对此进行了详细介绍,因此我建议您首先阅读。

值得注意的是,最不明显的一点是ASCII空格不会形成文本节点,而任何非空格字符都会形成非法文本节点,它们不能是table的子代。

然后,在当前标准https://html.spec.whatwg.org/multipage/tables.html#the-table-elementtr的“内容模型”中,我们看到:

内容模型: 零个或多个tdth和支持脚本的元素。

答案 3 :(得分:0)

如果问题是关于从符合HTML规范的HTML文档构建的DOM树,那么答案是tdth,如paxdiablo的回答中所述。

但是可以在脚本中修改DOM树。例如:

<!doctype html>
<table border>
<tr><td>foo <td>bar
</table>
<script>
var p = document.createElement('div');
p.innerHTML = 'Hello world!';
document.getElementsByTagName('tr')[0].appendChild(p);
</script>

这会使div元素成为tr元素的子元素。您甚至可以创建一些td元素,并使它们成为div元素的子元素。

这是否有意义以及它是否会混淆浏览器是一个不同的问题。并且浏览器通常不会解析HTML标记,例如tr元素包含div元素作为子元素 - 解析器不准备处理此类情况。在HTML标记中无法对td元素进行分组(除了使它们成为tr的子元素之外的任何其他方式)。但是在DOM中,你可以创建奇数树。

如果只想以特殊方式处理某些td元素,请为其提供class