I have problem becouse I want to surround some of td inside tr so I need to know.
Which DOM elements can be child of tr? (I know div cannot.)
I have problem becouse I want to surround some of td inside tr so I need to know.
Which DOM elements can be child of tr? (I know div cannot.)
The HTML spec states:
Permitted contents
Zero or more of: one
tdelement, or onethelement
<tr> elements can contain only <td>s and <th>s.
The situation is very similar to that of ul which I have described in detail at: Can we use any other TAG inside <ul> along with <li>? so I recommend you read that first.
Notably, the less obvious point is that ASCII whitespace does not form text nodes, while any non-whitespace characters forms and illegal text node, which cannot be children of table.
Then, in the "Content model" of tr in the current standard https://html.spec.whatwg.org/multipage/tables.html#the-table-element we see:
Content model: Zero or more
td,th, and script-supporting elements.
If the question is about a DOM tree constructed from an HTML document that conforms to HTML specifications, then the answer is td and th, as explained in paxdiablo’s answer.
But you can modify a DOM tree as you like, in scripting. For example:
<!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>
This will make a div element a child of a tr element. You could even put create some td elements and make them children of the div element.
Whether this makes sense and whether it might confuse browsers is a different issue. And browsers will not parse normally HTML markup where e.g. tr element contains a div element as a child – parsers are not prepared to handle such cases. Grouping td elements (in any other way than making them children of a tr) is not possible in HTML markup. But in the DOM, you can create odd trees.
If just want to deal with some td elements in a special way, give them a class.