자바 스크립트에서 DOM 요소에 대한 HTML을 얻는 방법


94

다음 HTML이 있다고 상상해보십시오.

<div><span><b>This is in bold</b></span></div>

div 자체를 포함하여 div에 대한 HTML을 얻고 싶습니다. Element.innerHTML은 다음 만 반환합니다.

<span>...</span>

어떤 아이디어? 감사

답변:


87

jldupont의 답변을 확장하면 즉시 래핑 요소를 만들 수 있습니다.

var target = document.getElementById('myElement');
var wrap = document.createElement('div');
wrap.appendChild(target.cloneNode(true));
alert(wrap.innerHTML);

실제 문서에서 요소를 제거하고 다시 삽입 할 필요가 없도록 요소를 복제하고 있습니다. 그러나 인쇄하려는 요소의 아래에 매우 큰 트리가있는 경우 비용이 많이들 수 있습니다.


안녕-균형에 이것은 아마 나의 최선의 선택 일 것이다. 요소를 분리 / 부착하는 데 약간의주의를 기울이고 DOM을 망칠 수 없으며 큰 나무가있을 것으로 기대하지 않습니다.
— Richard H

하지 않는 한 myElement은 너무에 리, 테이블 행 또는 테이블 셀과 같은 사업부의 자식이 될 수없는 요소이다.
— RobG

20
이제 2013 년이되었으므로 "domnode.outerHTML"호출은 모든 주요 브라우저에서 작동합니다 (v11 이후 FF)
— Kevin

87

사용 outerHTML:

var el = document.getElementById( 'foo' );
alert( el.outerHTML );

2
아니요, IE 확장입니다. Firefox 해결 방법이 있지만 : snipplr.com/view/5460/outerhtml-in-firefox
— Wim

1
WebKit 기반 브라우저는이를 지원하는 것 같지만 Firefox는 지원하지 않습니다.
— Jørn Schou-Rode

2
quirksmode.org/dom/w3c_html.html 에 따르면 IE, Opera, Safari 및 Chrome에서 작동합니다.
— Majkel

18
outerHTML은 HTML5의 일부이므로 시간 내에 모든 사람이 지원해야합니다.
— Xanthir


8

먼저 div문제 의을 감싸는 요소를 놓고 요소 에 id속성을 넣은 다음 그 요소에 사용 getElementById합니다. 일단 당신이 HTML을 검색하기 위해 'e.innerHTML'을하세요.

<div><span><b>This is in bold</b></span></div>

=> <div id="wrap"><div><span><b>This is in bold</b></span></div></div>

그리고:

var e=document.getElementById("wrap");
var content=e.innerHTML;

참고outerHTML 크로스 브라우저 호환되지 않습니다.


1
div의 부모에 대한 innerHTML을 얻는 문제는 div의 형제에 대한 innerHTML도 얻을 수 있다는 것입니다
— Richard H

내 잘못은 "요소"를 참조하는 "요소에 ID 속성을 넣어"라고 생각했습니다. 마지막 편집 div을 통해 수프 에 추가하고 싶은 것이 훨씬 더 분명해 졌습니다. :)
— Jørn Schou-Rode

@JP : 요소가 document...에 없으면 어디에 있습니까? 우리 모두를 계몽 해주시겠습니까?
— jldupont

@JP : 물론 원하는 곳에 요소를 만들 수 있지만 이것은 투표 할 이유 가 없습니다 . 그런 태도로 여기에서 많은 친구를 사귀지 못할 것입니다.
— jldupont

outerHTML은 오랫동안 브라우저 간 호환이 가능하다는 것을 확신합니다. 사용하는 것을 두려워하지 마십시오.
— Snow

3

더 가벼운 풋 프린트를 원하지만 더 긴 스크립트를 원한다면 innerHTML 요소를 가져 와서 빈 부모 만 만들고 복제하십시오.

function getHTML(who,lines){
    if(!who || !who.tagName) return '';

    var txt, ax, str, el= document.createElement('div');
    el.appendChild(who.cloneNode(false));
    txt= el.innerHTML;
    ax= txt.indexOf('>')+1;
    str= txt.substring(0, ax)+who.innerHTML+ txt.substring(ax);

    el= null;
    return lines? str.replace(/> *</g,'>\n<'): str;
    //easier to read if elements are separated
}


2

outerHTML은 IE 전용이므로 다음 함수를 사용하십시오.

function getOuterHtml(node) {
    var parent = node.parentNode;
    var element = document.createElement(parent.tagName);
    element.appendChild(node);
    var html = element.innerHTML;
    parent.appendChild(node);
    return html;
}

부모 유형의 가짜 빈 요소를 만들고 그것에 innerHTML을 사용한 다음 요소를 다시 일반 dom에 다시 연결합니다.


2

크로스 브라우저가 되려면 이와 같은 것을 원할 것입니다.

function OuterHTML(element) {
    var container = document.createElement("div");
    container.appendChild(element.cloneNode(true));

    return container.innerHTML;
}

1
element호출되면 문서에서 제거 됩니다.
— Jørn Schou-Rode

이제 cloneNode를 추가하여 수정했을 것입니다. 이는 여기의 다른 답변 중 일부와 거의 동일합니다.
— Nikolas Stephan

1

오래된 질문이지만 새로운 이민자를 위해 :

document.querySelector('div').outerHTML


0

element.outerHTML 지원에 따라 outerHTML 함수를 정의합니다.

var temp_container = document.createElement("div"); // empty div not added to DOM
if (temp_container.outerHTML){
    var outerHTML = function(el){return el.outerHTML||el.nodeValue} // e.g. textnodes do not have outerHTML
  } else { // when .outerHTML is not supported
    var outerHTML = function(el){
      var clone = el.cloneNode(true);
      temp_container.appendChild(clone);
      outerhtml = temp_container.innerHTML;
      temp_container.removeChild(clone);
      return outerhtml;
    };
  };

-2
var el = document.getElementById('foo');
el.parentNode.innerHTML;

4
이것은 또한 div의 형제 자매에 대한 HTML을 제공합니다.
— Richard H

반대표는 어떻습니까? 원래 질문은 형제 자매와 관련이 없습니다. 이 답변은 질문의 원래 맥락을 고려할 때 완벽하게 유효한 답변이었습니다.
— Jason Leveille

다른 한편으로, 원래의 질문은 부모와 관련이 없습니다. 그래서 뭐든.
— Jason Leveille
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.