2012-01-29 2 views
2

자바 스크립트를 사용하여 tbody없이 테이블 만들기 createElement/appendChild는 방화범에 tbody를 추가하지 않지만 innerHTML을 사용하면됩니다. 왜? 수동으로 tbody를 추가해야합니까?createElement/appendChild가있는 자동화 된 tbody가 없습니까?

+0

나는 당신이 수동으로 tbody를 추가하도록 권유합니다. 'table.tBodies'를 사용할 수 있습니다. – Raynos

답변

0

DOM 작성 방법을 사용할 때 구조 작성 방법을 원한다고 가정해야합니다.

다른 브라우저에서 동일한 구조를 유지하려는 경우 JavaScript가 HTML을 구문 분석하는 경우에도 항상 수동으로 추가해야합니다. 브라우저가 그 점에서 동일하게 동작하지 않을 수 있으므로 브라우저를 사용하여 삽입하지 마십시오.


Here's an example Firefox에서 실행할 수 있습니다.

마크 업으로 시작합니다.

<p> 
    <div>original</div> 
</p> 

<div>는 ... 그것은 다음과 같이 렌더링 떠나 HTML 구문 분석됩니다 <p>에서

<p>‌</p> 
<div>original</div> 
<p></p> 

쫓겨 도착하지만 우리는 DOM 방법과 동일한 구조를 만드는 경우, 파이어 폭스는 '아무튼 어떤 수정도하지 마라.

var p = document.createElement('p'); 

p.appendChild(document.createElement('div')) 
    .appendChild(document.createTextNode('new')); 

document.body.appendChild(p); 

그래서 결과 DOM은

<p>‌</p> 
<div>original</div> 
<p></p> 

<p> 
    <div>new</div> 
</p> 

그래서 당신은 당신이 보는 것조차 완전히 잘못된 구조의 경우는 수정을하지 않는 것을 알 수 있습니다 ... 지금이다 HTML을 파싱 할 때.

궁극적으로 브라우저간에 동일한 보장이 없으므로 궁극적으로 일반적인 브라우저 조정 또는 수정에 의존하지 않아야합니다.

잘 구성된 HTML을 사용하면 문제를 피할 수 있습니다.

+0

팁과 예제를 제공해 주셔서 감사합니다! 그것은 나에게 이상한 일이었습니다. DOM 생성 메소드가 여러분이 만든 방식대로 구조를 표시한다면, 수동으로 생성 된 HTML 테이블은 여러분이 수정하는 방법이나 다른 방법을 사용하지 않고 수정하는 모든 방법을 존중해야합니다. – baptx

+0

@baptx : HTML을 사용하면 실제로 DOM 구조를 수동으로 생성하지 않습니다. * 마크 업 *을 통해 XML을 생성합니다.이 태그는 구문 분석되어 DOM 구조로 해석되어야합니다. 브라우저 교정으로 이어진 해석이라고 확신합니다. DOM 메서드를 사용하여 DOM 구조를 만들 때 해석이 이루어지지 않습니다. 그것은 개발자가 명시 적으로이 노드를 그 노드에 넣는 것을 말하는 것이므로 메서드가 여러분이 말하는 것을합니다. –

+0

... * DOCTYPE *은 * 마크 업 *의 해석에만 역할을하지만 메소드는 * DOCTYPE *을 시행하지 않는다고 생각합니다. –

0

tbody 요소의 시작 및 끝 태그은 선택 사항이므로, DOM 노드를 직접 조작하여 태그 삽입을 건너 뜁니다.

수동으로 tbody를 추가해야합니까?

다소 주관적입니다.

+0

덕분에 선택 사항이지만이 노드를 사용하는 방식에 따라 표준이 준수되지 않습니다. – baptx