为什么在 domready 上 document.write(x) 不显示字符串末尾的实体转义?

Why does an entity escape at the end of the string not show up for document.write(x) on domready?

var target = '<p><img alt=\"\" src=\"upfiles\/54591303758197437.jpg\" \/><\/p>'
$(function(){
    var x=$('<div/>').text(target).html();
    alert(x);
    document.write(x)
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

我显示包含 html 标签的转义字符串并写入网页。
alertwindow中的转义字符串是对的,但是关闭alertwindow后只能看到(screenshot):

<p><img alt="" src="upfiles/54591303758197437.jpg" /></p

最后一个 > 在哪里?

为什么 <p><img alt="" src="upfiles/54591303758197437.jpg" /></p> 不会出现在网页中?

我在 Chrome 69 (Windows) 上有同样的症状。

按照 MDN 的建议,通过添加 document.close() 调用设法修复了它:

target = '<p><img alt=\"\" src=\"upfiles\/54591303758197437.jpg\" \/><\/p>'
$(function(){
    x=$('<div/>').text(target).html();
    alert(x);
    document.write(x);
    document.close();
});
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

这个令人费解的难题的正确且正式记录的答案在 中。对于寻求快速修复的任何人,只需在字符串末尾附加一个 space,您就会恢复理智。

document.write(x+' ')