JavaScript를 사용하여 div에 데이터를 추가하는 방법은 무엇입니까?


404

JavaScript에서 div를 채우는 div 요소에 데이터를 추가하기 위해 AJAX를 사용하고 있습니다 .div에서 찾은 이전 데이터를 잃지 않고 div에 새 데이터를 추가하는 방법은 무엇입니까?


7
$ (div) .append (data);
jimy

56
@jimy thats jquery, 그런 사소한 일에 그것을 사용할 필요가 없습니다
Naftali 일명 Neal

2
@Neal은 확실하지만 AJAX도 사용하고 있으므로 jQuery는 확실히 좋습니다.
Alnitak

3
@Alnitak,하지만 OP가 무엇을 위해 jQuery를 사용하고 있는지 어떻게 알 수 있습니까?
Naftali 일명 Neal

26
@Alnitak, jQuery는 유일한 아약스 솔루션 이 아닙니다
Naftali 일명 Neal

답변:


585

이 시도:

var div = document.getElementById('divID');

div.innerHTML += 'Extra stuff';

31
위험, 윌 로빈슨! 텍스트가 아닌 HTML 이 추가 됩니다. 사용자가 Extra Stuff를 제공 한 경우 방금 보안 취약점을 소개 한 것입니다. 아래 @Chandu의 답변을 사용하는 것이 좋습니다.
David 주어진

8
예, XSS 취약점 입니다. 아래 답변에서 설명하는 것처럼 내용으로 텍스트 노드를 만드는 것이 훨씬 좋습니다.
David 주어진

1
div이벤트 리스너가있는 요소 또는 사용자가 입력 한 텍스트가있는 입력이 포함 된 경우에도 작동하지 않습니다. 나는 Chandu답변을 추천합니다 .
user4642212


2
예, 확인란, 이벤트 리스너의 상태가 손상되므로 이것을 권장하지 않습니다.
Kurkula

338

appendChild 사용하기 :

var theDiv = document.getElementById("<ID_OF_THE_DIV>");
var content = document.createTextNode("<YOUR_CONTENT>");
theDiv.appendChild(content);

innerHTML 사용 :
이 방법은 @BiAiB에서 언급 한대로 기존 요소에 대한 모든 리스너를 제거합니다. 따라서이 버전을 사용하려는 경우주의하십시오.

var theDiv = document.getElementById("<ID_OF_THE_DIV>");
theDiv.innerHTML += "<YOUR_CONTENT>"; 

angularjs 바인딩이있는 "contenteditable"요소와 함께이 메소드를 사용하면 모든 것이 올바르게 작동합니다!
wrongite

1
실제로 대답이 받아 들여 져야합니다. 아름다운 방법 일뿐만 아니라 innerHTML은 DOM을 다시 빌드 할 것이며 이는 좋은 해결책이 아닙니다. appendChild ()를 사용하십시오.
Jan Sverre

4
이 방법이 더 좋지만 createTextNodeHTML을로드하는 경우 작동하지 않습니다. 예를 들어 목록 항목을 추가하려는 경우 작동하지 않습니다. 꽤 제한적입니다.
Jake

다음 이벤트에서 동일한 추가 텍스트 노드의 텍스트를 변경하려면 어떻게해야합니까?
Rahul Mishra

120

주의해서 사용하면 무언가 innerHTML잃어 버릴 수 있습니다.

theDiv.innerHTML += 'content',     

다음과 같습니다.

theDiv.innerHTML = theDiv.innerHTML + 'content'

그러면 내부의 모든 노드가 파괴 div되고 새로운 노드가 다시 생성됩니다. 내부의 요소에 대한 모든 참조 및 리스너는 손실됩니다 .

예를 들어 클릭 핸들러를 첨부 할 때이를 유지해야하는 경우 DOM 함수 (appendChild, insertAfter, insertBefore)를 사용하여 새 컨텐츠를 추가해야합니다.

var newNode = document.createElement('div');      
newNode.innerHTML = data;
theDiv.appendChild( newNode )

2
예, 그러나 이것은 부모 div 안에 여분의 div 가 생겨 필요하지 않으며 일부 CSS 스타일을
망칠

@Neal 이것은 appendChild를 사용하는 예제 방법입니다. 요점은 여기에 없습니다.
BiAiB

올바른 방법 appendChild은 @Cybernate에 의해 수행되었습니다
Naftali 일명 Neal

3
@ 닐 아니오 그렇지 않습니다. 정확하지도 않습니다. OP는 텍스트, html 코드 또는 기타 항목에 추가해야하는 항목에 따라 다릅니다.
BiAiB

1
@Neal 이것은 데이터를 완벽하게 추가하는 좋은 방법이며보다 다재다능합니다 document.createTextNode().
Alnitak

57

당신이 그것을하고 싶은 경우 신속 하고 잃게 참조와 청취자하지 않으려 사용 .insertAdjacentHTML를 () ;

" 사용중인 요소를 재분석 하지 않으므로 요소 내부의 기존 요소를 손상시키지 않습니다 . 추가 직렬화 단계를 피하면 직접적인 innerHTML 조작보다 훨씬 빠릅니다 ."

모든 메인 라인 브라우저 (IE6 +, FF8 +, 기타 및 모바일)에서 지원됩니다 : http://caniuse.com/#feat=insertadjacenthtml

https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML의

// <div id="one">one</div>
var d1 = document.getElementById('one');
d1.insertAdjacentHTML('afterend', '<div id="two">two</div>');

// At this point, the new structure is:
// <div id="one">one</div><div id="two">two</div>

이 방법을 사용할 때 고려해야 할 사항, 제약 사항 등이 있습니까?
som

1
멋진 호환성 : 더 나은 솔루션!
Arthur Araújo

2
이 또한 insertAdjacentElement()insertAdjacentText().
nyg


이 방법은 최고의 솔루션입니다!
Sergey NN


8

이것조차도 효과가 있습니다.

var div = document.getElementById('divID');

div.innerHTML += 'Text to append';

6

새 텍스트 노드를 만들지 않고 IE9 + (Vista +) 솔루션 :

var div = document.getElementById("divID");
div.textContent += data + " ";

그러나 각 메시지 후에 새로운 줄이 필요했기 때문에 이것은 나를 위해 속임수를 쓰지 않았으므로 DIV는이 코드로 스타일이 지정된 UL로 바뀌 었습니다.

var li = document.createElement("li");
var text = document.createTextNode(data);
li.appendChild(text);
ul.appendChild(li);

에서 https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent :

innerHTML과의 차이점

innerHTML은 이름이 나타내는 HTML을 반환합니다. 종종 요소 내에서 텍스트를 검색하거나 쓰려면 innerHTML을 사용합니다. 대신 textContent를 사용해야합니다. 텍스트가 HTML로 구문 분석되지 않으므로 성능이 향상 될 수 있습니다. 또한 이것은 XSS 공격 경로를 피합니다.


3

jQuery를 사용할 수 있습니다. 매우 간단합니다.

jQuery 파일을 다운로드하면 HTML에 jQuery를 추가
하거나 온라인 사용자 링크를 사용할 수 있습니다.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>

이것을 시도하십시오 :

 $("#divID").append(data);

1

다음 방법은 다른 방법보다 덜 일반적이지만 div의 마지막 자식 노드가 이미 텍스트 노드임을 확신 할 때 좋습니다. 이런 식으로 MDN 참조 AppendData를 사용하여 새 텍스트 노드를 만들지 않습니다appendData

let mydiv = document.getElementById("divId");
let lastChild = mydiv.lastChild;

if(lastChild && lastChild.nodeType === Node.TEXT_NODE ) //test if there is at least a node and the last is a text node
   lastChild.appendData("YOUR TEXT CONTENT");

0

왜 setAttribute를 사용하지 않습니까?

thisDiv.setAttribute('attrName','data you wish to append');

그런 다음이 데이터를 얻을 수 있습니다 :

thisDiv.attrName;

그 질문과 관련이 없기 때문에?
FaZe Unempl0yedd

-1

자바 스크립트

document.getElementById("divID").html("this text will be added to div");

jquery

$("#divID").html("this text will be added to div");

.html()입력 한 내용을 인수없이 사용하십시오 . 브라우저 콘솔을 사용하여 이러한 기능을 코드에서 사용하기 전에 신속하게 테스트 할 수 있습니다.


이것은 서로 받아 들인 대답의 사본입니다. 왜?
Stephen Rauch 2012

innerHtml과 html ()은 내 프로젝트에서 다르게 작동했습니다. innerHtml은 한 시나리오에서 아무 작업도 수행하지 않았습니다. 다른 사람에게도 같은 경우를 대비하여 추가했습니다.
Deepu Sahni
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.