我遇到问题,因为我想在td
内围绕一些tr
,所以我需要知道。
哪些DOM元素可以成为tr的子元素? (我知道div
不能。)
答案 0 :(得分:11)
W3C指定这个东西。对于tr
,您可以找到它here。基本上,只有th
和td
元素可以是直接 tr
的内容。
如果您希望表格中包含其他内容,则必须在内部 td
或th
元素。例如,td
可以包含流元素,包括div
。
答案 1 :(得分:4)
答案 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-element的tr
的“内容模型”中,我们看到:
内容模型: 零个或多个
td
,th
和支持脚本的元素。
答案 3 :(得分:0)
如果问题是关于从符合HTML规范的HTML文档构建的DOM树,那么答案是td
和th
,如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
。