Как получить HTML для элемента DOM в JavaScript - PullRequest
83 голосов
/ 19 ноября 2009

Представьте, что у меня есть следующий HTML:

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

Я хочу получить HTML для div, включая сам div. Element.innerHTML возвращает только:

<span>...</span>

Есть идеи? Спасибо

Ответы [ 10 ]

80 голосов
/ 19 ноября 2009

Использование outerHTML:

var el = document.getElementById( 'foo' );
alert( el.outerHTML );
77 голосов
/ 19 ноября 2009

Расширяя ответ jldupont, вы можете создать элемент упаковки на лету:

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

Я клонирую элемент, чтобы избежать необходимости удалять и повторно вставлять элемент в фактический документ. Это может быть дорого, если элемент, который вы хотите напечатать, имеет под ним очень большое дерево.

8 голосов
/ 19 ноября 2009

Сначала поместите элемент, который обертывает рассматриваемый div, поместите атрибут id в элемент, а затем используйте getElementById для него: как только вы получите элемент управления, просто выполните 'e.innerHTML` чтобы получить HTML.

<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 не совместим с разными браузерами.

3 голосов
/ 19 ноября 2009

Если вам нужен более легкий след, но более длинный скрипт, получите элементы innerHTML и создайте и клонируйте только пустой parent-

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 голосов
/ 09 сентября 2016
var x = $('#container').get(0).outerHTML;
2 голосов
/ 19 ноября 2009

Вы хотите, чтобы что-то вроде этого было кросс-браузерным.

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

    return container.innerHTML;
}
1 голос
/ 19 ноября 2009

так как externalHTML предназначен только для 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;
}

создает фиктивный пустой элемент типа parent и использует для него innerHTML, а затем повторно присоединяет элемент обратно в обычный dom

0 голосов
/ 15 мая 2019

старый вопрос, но для новичков, которые приходят:

document.querySelector('div').outerHTML

0 голосов
/ 29 июня 2014

определить функцию externalHTML на основе поддержки element.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;
    };
  };
0 голосов
/ 19 ноября 2009
var el = document.getElementById('foo');
el.parentNode.innerHTML;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...