如何将HTMLElement转换为字符串


84

我将在JavaScript中创建XML元素以与服务器端交换数据。我发现我可以做到document.createElement。但是我不知道如何将其转换为字符串。浏览器中是否有任何API使其更容易使用?还是有包括此API的任何JS库?

编辑:我发现浏览器API XMLSerializer,它应该是序列化为字符串的正确方法。


Answers:


38

您可以通过克隆元素,将其添加到空的,“后台”容器中并读取容器的innerHTML来获取“ outer-html”。

本示例采用可选的第二个参数。

调用document.getHTML(element,true)以包括元素的后代。

document.getHTML= function(who, deep){
    if(!who || !who.tagName) return '';
    var txt, ax, el= document.createElement("div");
    el.appendChild(who.cloneNode(false));
    txt= el.innerHTML;
    if(deep){
        ax= txt.indexOf('>')+1;
        txt= txt.substring(0, ax)+who.innerHTML+ txt.substring(ax);
    }
    el= null;
    return txt;
}

1
您也可以直接拨打domElement.outerHTMLw3schools.com/jsref/prop_html_outerhtml.asp
user007

146

elementouterHTML属性(注意:版本11之后受Firefox支持)返回整个元素的HTML。

<div id="new-element-1">Hello world.</div>

<script type="text/javascript"><!--

var element = document.getElementById("new-element-1");
var elementHtml = element.outerHTML;
// <div id="new-element-1">Hello world.</div>

--></script>

同样,您可以innerHTML用来获取给定元素中包含的HTML,或innerText获取元素中的文本(没有HTML标记)。

也可以看看

  1. outsideHTML-Javascript属性
  2. Javascript参考-元素

但是似乎我无法获得带有属性externalHTML的内部文本。我认为我真正想要的是HTML标记。
晓啸2010年


几乎所有现代浏览器都支持externalHTML
Williams A.

1

最简单的方法是将该元素的innerHTML复制到tmp变量并使其为空,然后追加新元素,然后将tmp变量复制回它。这是我用来向顶部添加jquery脚本的示例。

var imported = document.createElement('script');
imported.src = 'http://code.jquery.com/jquery-1.7.1.js';
var tmpHead = document.head.innerHTML;
document.head.innerHTML = "";
document.head.append(imported);
document.head.innerHTML += tmpHead;

这么简单:)


0

有一个tagName属性,也有一个attributes属性:

var element = document.getElementById("wtv");
var openTag = "<"+element.tagName;
for (var i = 0; i < element.attributes.length; i++) {
    var attrib = element.attributes[i];
    openTag += " "+attrib.name + "=" + attrib.value;
}
openTag += ">";
alert(openTag);

另请参阅如何遍历HTML元素中的所有属性?(我做到了!)

innerHTML如果您不想遍历所有子元素,可以在打开和关闭标签之间获取内容。

alert(element.innerHTML);

...然后使用再次获得close标签tagName

var closeTag = "</"+element.tagName+">";
alert(closeTag);

恐怕有时需要编写获取整个标记的代码。
萧啸2010年

如果它的XML应该全部在一个根节点中,是吗?如果是这样,那么您只需要对根节点执行此操作-所有主要浏览器都支持innerHTML,并将为您提供嵌套在根节点中的X(H)TML。(即一切!)
理查德JP Le Guen 2010年

1
为什么要遍历元素的属性并从中构建字符串“标签”呢?只需将元素包装在ANOTHER元素中,然后获取该新父元素的innerHTML。瞧,outerHTML的即时解决方法。
Marc B

0

这可能不适用于所有情况,但是从xml提取时,我遇到了这个问题,为此我解决了。

function grab_xml(what){
var return_xml =null;
    $.ajax({
                type: "GET",
                url: what,
                success:function(xml){return_xml =xml;},
        async:   false
        });
return(return_xml);
}

然后获取xml:

var sector_xml=grab_xml("p/sector.xml");
var tt=$(sector_xml).find("pt");

然后,当需要从包含html标记的XML文件中读取内容时,我便使该函数提取xml行。

    function extract_xml_line(who){
    var tmp = document.createElement("div");
    tmp.appendChild(who[0]);
    var tmp=$(tmp.innerHTML).html();
    return(tmp);
}

现在得出结论:

var str_of_html= extract_xml_line(tt.find("intro")); //outputs the intro tag and whats inside it: helllo  <b>in bold</b>

0

我使用的是Angular,并且需要相同的东西,因此进入了此职位。

@ViewChild('myHTML', {static: false}) _html: ElementRef;
this._html.nativeElement;

0

假设您的元素是完整的[object HTMLDocument]。您可以通过以下方式将其转换为字符串

const htmlTemplate = `<!DOCTYPE html><html lang="en"><head></head><body></body></html>`;

const domparser = new DOMParser();
const doc = domparser.parseFromString(htmlTemplate, "text/html"); // [object HTMLDocument]

const doctype = '<!DOCTYPE html>';
const html = doc.documentElement.outerHTML;

console.log(doctype + html);

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.