在新窗口中打印包含标记的html文本

时间:2015-11-07 23:44:32

标签: javascript html

我需要在一个带有字符串html标签html的新窗口中打印。 我做的是:

function printNewTab(toPrint, title) {
   var newWin = window.open("about:blank");
   newWin.document.write("<html><head><title>" + title + "</title></head></html>");
   newWin.document.write(toPrint.toString());
   console.log(title + ":");
   console.log(toPrint);
}

但如果我有这样的字符串:

var s = "<h1>title<u> number</u> 1</h1>";

并使用上述方法:

printNewTab(s, "title");

我获得了一个新窗口,其中文本不显示标签,但格式为html。

虽然我真的很想看到打印<h1>title<u> number</u> 1</h1>。 我怎样才能做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果您对字符串进行html编码,以便<之类的符号变为&lt,那么它就可以正常工作。

document.write("&lt;h1&gt;");将打印<h1>

顺便说一句,jQuery的text()函数可以帮到你。

function escapeHtml(unsafe) {
    return unsafe
         .replace(/&/g, "&amp;")
         .replace(/</g, "&lt;")
         .replace(/>/g, "&gt;")
         .replace(/"/g, "&quot;")
         .replace(/'/g, "&#039;");
 }

document.write(escapeHtml("<h1>title<u> number</u> 1</h1>"));

这将打印<h1>title<u> number</u> 1</h1>

取自this question的功能。归功于@bjornd。

答案 1 :(得分:1)

将所有html字符转换为实体,可能如下:

/

顺序无关紧要除了&符号必须首先取代,否则会造成奇怪的行为。