DOM scripting을 통해 동적으로 테이블 형태의 달력을 만들고 HTML 본문에 삽입하는 경우를 보자. <table> 태그를 생성하여 날짜를 <td>태그에 텍스트노드로 삽입하고, 1주일을 담은 각각의 <tr>태그를 <table>태그에 붙이는 형태가 된다. 예를 들어 아래와 같은 형태의 코드를 작성할 것이다.
var calendar = document.createElement("table"); // 달력 테이블 생성
var week = document.createElement("tr"); // 달력에 들어갈 1주 생성
var day = document.createElement("td"); // 1주에 들어갈 1일 생성
.
. // 어쩌고 저쩌고 해서 여러 개의 1주, 1일 데이터 생성
.
calendar.appendChild(week); // 달력 완성
var week = document.createElement("tr"); // 달력에 들어갈 1주 생성
var day = document.createElement("td"); // 1주에 들어갈 1일 생성
.
. // 어쩌고 저쩌고 해서 여러 개의 1주, 1일 데이터 생성
.
calendar.appendChild(week); // 달력 완성
완성된 달력인 calendar 엘리먼트를 원하는 위치에 붙여 넣으면 된다.(여기서는 간단하게 설명하기 위해서 <body> 태그에 바로 붙인다고 치자.)
document.body.appendChild(calendar);
이렇게 하면 FF에서는 정상적인 달력이 출력된다. 그러나 IE에서는 아무 것도 표시되지 않는다. 동일한 코드에 다른 결과가 나오는 것이다. 이런 것들이 프로그래머들을 쓸데없는 노가다의 세계로 이끌어 내는 것이다. 정말 싫은 경우다. 이와 관련된 이슈를 찾기 위해서 구글에서 검색해보니 이런 글이 있었다.
Dynamically created tables in Internet Explorer
즉, IE에서 이 문제를 해결하기 위해서는 테이블 내의 내용물을 <tbody>태그로 한 번 더 감싸줘야 하는 것이다. 뭐 이런 ?$#@!@같은 경우가!!! 아니나 다를까 <tbody>태그로 한번 감싸주고 <table>태그에 붙여주니 IE에서도 정상적으로 작동이 된다. MS...아놔 어쩌라고?! 이건 로직도 아니고 뭣도 아니고 그냥 아무 이유없이 이런 거잖아.

흐흐흐... 해본 사람만 알조.
정말 x랄 같다는...
DHTML 좀 할라믄 정말 각 브라우저별 특성에 익숙하야 하더군요.
국내 모 사이트 개발하니라 머리 뽀개지는 줄 알았습니다. ^^
네. 정말 안타깝습니다. 개발자들이 쓸데없는 데에 땀을 쏟아야 하니까요. 이런 것도 노가다라고 해야겠죠?
IE에서 쓰이는 엔진이 태그를 해석하기를
table 밑에 tbody가 자동으로 처리됩니다.
그냥 table -> tr 이렇게 작성해도 처리하길 위와 같이 처리합니다.
그렇다면 DOM scripting을 통해 생성되는 <table> 태그는 해당이 안되는 건가요? 그게 좀 이상한 것 같습니다. 일관성이 없으니까요.
tbody나 thead 는 tr을 grouping 하기 위한 웹표준 태그입니다. 이 경우에는 IE가 엄격하게 표준을 지키려고 한거고, FF가 융통성으로 넘어간것입니다.
http://www.w3.org/TR/html4/struct/tables.html#h-11.2.1
말씀하신 문서를 보니까 이렇게 되어 있네요.
<!ELEMENT TABLE - -
(CAPTION?, (COL*|COLGROUP*), THEAD?, TFOOT?, TBODY+)>
<caption>, <thead>, <tfoot>은 없어도 되지만, <tbody>는 반드시 1개 이상이 있어야 하는군요. 표준대로 한다면 <tbody>가 반드시 들어가야 한다는 사실을 처음 알게 되었네요. 조언 감사합니다.
그런데 IE에서 한가지 이상한 점은 DOM scripting을 통해 동적으로 생성하지 않고, 정적으로 HTML 문서에 기록된 테이블을 파싱할 때에는 <tbody>가 없어도 잘 표현된다는 겁니다.
기존에 작성된 웹문서들과의 호환성을 위해서 <tbody>태그가 없는 테이블도 보이게 하는 것이라면, 동적으로 생성되는 테이블도 보이게 해줬으면 좋겠네요. 뭔가 일관성이 없어서 혼동되는군요.
그리고 이건 별도의 이야기입니다만, W3C 문서에서 예제로 보여주는 테이블 태그를 보면 <tbody>가 없군요. -_-;; 이건 뭐하자는건지.
리눅스로 인터넷 하면서 답답했던
기억이 떠오르네요..아웅~
머 요즘은 그럭저럭 잘되지만..@@;;
저도 최근에 우분투를 설치해봤는데요. 웹서핑을 할 때 좀 불편하더군요. 국내 웹환경이 워낙 MS에 의존적이라서 잘 아되는 웹사이트가 많거든요. 웹표준은 둘째 치고라도 무슨 ActiveX가 이렇게 난무하는지...-_-;;