Как получить HTML для элемента DOM в javascript
представьте, что у меня есть следующий HTML:
<div><span><b>This is in bold</b></span></div>
Я хочу получить HTML для div, включая сам div. Элемент.innerHTML возвращает только:
<span>...</span>
какие идеи? Спасибо
9 ответов:
расширяя ответ jldupont, вы можете создать элемент обертывания на лету:
var target = document.getElementById('myElement'); var wrap = document.createElement('div'); wrap.appendChild(target.cloneNode(true)); alert(wrap.innerHTML);
Я клонирую элемент, чтобы избежать необходимости удалять и вставлять элемент в фактический документ. Это может быть дорого, если элемент, который вы хотите напечатать, имеет очень большое дерево под ним.
во-первых, положить на элемент, который обертывает
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
это не кросс-браузер совместимый.
Если вы хотите более легкий след, но более длинный скрипт, получите элементы 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 }
поскольку 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; }
создает фиктивный пустой элемент типа parent и использует на нем innerHTML, а затем снова присоединяет элемент к обычному dom
вы хотите, что-то вроде этого для того, чтобы быть кросс-браузер.
function OuterHTML(element) { var container = document.createElement("div"); container.appendChild(element.cloneNode(true)); return container.innerHTML; }
определить функцию 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; }; };