我将在JavaScript中创建XML元素以与服务器端交换数据。我发现我可以做到document.createElement。但是我不知道如何将其转换为字符串。浏览器中是否有任何API使其更容易使用?还是有包括此API的任何JS库?
编辑:我发现浏览器API XMLSerializer,它应该是序列化为字符串的正确方法。
Answers:
您可以通过克隆元素,将其添加到空的,“后台”容器中并读取容器的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;
}
domElement.outerHTML(w3schools.com/jsref/prop_html_outerhtml.asp)
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标记)。
最简单的方法是将该元素的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;
这么简单:)
有一个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);
这可能不适用于所有情况,但是从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>
假设您的元素是完整的[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);