2013-11-01 6 views
0

Here is an example. 콘솔에서 결과를 확인하십시오. 처음 두 개의 div (첨부되지 않음, 콘솔의 <script> 위)에는 적절한 간격과 들여 쓰기가 있습니다. 그러나 두 번째 두 div은 완전히 동일하지만 추가되었지만 원본과 동일한 서식 또는 공백을 표시하지 않습니다. 나는 그것이들여 쓰기/간격이있는 DOM에 요소 추가

<div> 
    <div></div> 
</div> 

같이 할 때 입력

var newElem = document.createElement('div'); 
document.body.appendChild(newElem); 
var another = document.createElement('div'); 
newElem.appendChild(another); 
console.log(document.body.innerHTML); 

예를 들어

사이 적절한 공백을 생성 할 수있는 방법이 있나요 출력

<div><div></div></div> 

를 제공 추가 요소를 가져오고 innerHTML (또는 possib 르 비슷한 의미)? 나는 작업중인 페이지의 계층과 구조를 시각적으로 표시 할 수 있어야합니다.

나는 실제 HTML에 요소 이내에 추가 시도했지만 동일한 동작을 가지고

내가 lincolnk이 제안 텍스트 노드와 줄 바꿈을 사용하여 그 일에 괜찮을 거라고하지만 필요 다른 요소는 계층 구조

의 다른 수준에 있기 때문에 내가 어떤 jQuery를이

+0

당신은'innerText' 또는'textContent' (FF)를 찾고 있다고 생각합니다 ...? – joshstrike

+0

@joshstrike 아니요, 아닙니다. 나는 필요한 것을 더 명확하게하기 위해 질문을 업데이트했습니다. –

답변

4

나는 당신이 DOM에 요소를 추가 할 수 있도록 요구하고 생각 문자열 document.body.innerHTML에서 반환하도록 당신이 바로, 텍스트 편집기에 입력 한 것처럼 들여 쓰기 등으로 포맷됩니다 ?

그렇다면,이 같은 작동 될 수 있습니다

function indentedAppend(parent,child) { 
    var indent = "", 
     elem = parent; 

    while (elem && elem !== document.body) { 
     indent += " "; 
     elem = elem.parentNode; 
    } 

    if (parent.hasChildNodes() && parent.lastChild.nodeType === 3 && /^\s*[\r\n]\s*$/.test(parent.lastChild.textContent)) { 
     parent.insertBefore(document.createTextNode("\n" + indent), parent.lastChild); 
     parent.insertBefore(child, parent.lastChild); 
    } else { 
     parent.appendChild(document.createTextNode("\n" + indent)); 
     parent.appendChild(child); 
     parent.appendChild(document.createTextNode("\n" + indent.slice(0,-2))); 
    } 

} 

데모 : http://jsbin.com/ilAsAki/28/edit

당신이 그것으로 연주해야 할 수도 있습니다, 그래서 너무 많이, 그것으로 생각을 넣어하지했지만, 그것은이다 적어도 출발점.

또한, 나는 당신이 사용하고있는 것처럼 2 칸 들여 쓰기를 가정했습니다.

아, 그리고 <pre> 태그 또는 HTML의 공백을 유지하기 위해 CSS가 설정된 모든 위치에서이 값을 사용할 때주의해야합니다.

+0

+1 매우 좋았는데, 이것은 내가 생각했던 방식이다. 그러나 그것을 올바르게 만들지 못했다. (' "\ n"'을 사용하면 내가하는 것보다 쉽게 ​​만든다. 노력 중이었다). 작은 요소 하나 : 기존 요소와 동일한 레벨에 요소를 추가 할 때 불필요한 빈 줄이 있습니다. 이것을 제거하는 쉬운 방법이 있습니까? [예제] (http : // jsbin.co.kr/ilAsAki/12/edit) –

+0

@Zeaklous가 업데이트 된 답변을 확인하십시오 – BYossarian

+0

정말 고마워요. 아무도 깨끗한 솔루션을 제공하지 않는다면 (어쨌든 기본 추가 기능을 사용한다는 의미 일 가능성이 높습니다.) 현상금이 당신 것입니다. –

0

당신은 직접 문자열을 추가 할 document.createTextNode()을 사용할 수 없습니다하십시오 같은 .createTextNode(' </br>')을 사용할 수 없습니다 의미 동적 결과에 영향을 미친다.

var ft = document.createElement('div'); 
document.body.appendChild(ft); 
document.body.appendChild(document.createTextNode(' ')); 
var another = document.createElement('div'); 
document.body.appendChild(another); 
console.log(document.body.innerHTML); 
+0

HTML에 의해'body '에 배치 된 요소들에서 행해지는 것과 같은 계층 구조를 기반으로 각 행을 동적으로 포맷하는 방법이 있습니까? 나는 더 명확하게하기 위해 나의 질문을 업데이트했다. –

관련 문제