我正在尝试使用类html
和下面的jquery代码显示未呈现的HTML代码。
它适用于除标记<html>
,<head>
和<body>
之外的所有标记。
有没有办法可以将它们显示为文本?
$(document).ready(function () {
$('.html').each(function () {
$(this).text($(this).html());
});
});
HTML code:
<pre>
<div class="html">
<html>
<head><title>Title</title></head>
<body>
<p>Unrendred html</p>
</body>
</html>
</div>
</pre>
预期内容:
<div class="html">
<html>
<head><title>Title</title></head>
<body>
<p>Unrendred html</p>
</body>
</html>
</div>
实际内容:
<title>Title</title>
<p>Unrendred html</p>
答案 0 :(得分:5)
您的HTML无效。您不能在其中放置大部分标签。
当浏览器尝试解析您的无效HTML时,它会遇到您的错误并尝试从中恢复。
这样做的结果是它们永远不会放在DOM的.html
元素中,因此当您尝试将DOM转换回HTML时,它们将不会出现。
你可以将它们从中删除的唯一方法是从服务器重新获取原始源代码,然后自己解析HTML。
首先正确编写HTML。如果要呈现<
个字符,请将<
放入HTML(依此类推)。在浏览器解析之后,不要尝试使用JavaScript来转义HTML。
答案 1 :(得分:3)
您需要替换下面的标记语法
这个小提琴示例的预期结果 - http://jsfiddle.net/uEMh2/
<pre>
<div class="html">
<html>
<head><title>Title</title></head>
<body>
<p>Unrendred html</p>
</body>
</html>
</div>
</pre>
答案 2 :(得分:1)
escapeHTML {
return html.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>');
}
这就是原型处理它的方式。
答案 3 :(得分:0)
我尝试通过jquery解决您的问题,但您必须在代码中添加一个未使用的<pre>
标记,并添加两行jquery code
如果您忽略输出中的<pre>
和jquery script
,那么一切都如您所愿
<!doctype html>
<html lang="en">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function () {
var data = $('html').html();
data = "<!doctype html>\n<html lang=\"en\">\n"+data+"\n</html>";
var data = $('pre#html-code').text(data);
});
</script>
</head>
<body>
<pre id="html-code"></pre>
</body>
</html>
答案 4 :(得分:-1)
转义html和{j}上的<>
个字符,并使用html
函数代替html()
<pre>
<div class="html">
<p>< html / ></p >
<head ><title >Title</title></head >
<body >
<p >Unrendred html</p >
</body >
</html>
</div>
</pre>
$(document).ready(function () {
$('.html').each(function () {
$(this).text($(this).html);
});
});