0

思考这个问题的几种方法。自己决定哪个对你最有用……</p>

  • javascript 可以使用“xmp”类重新创建已弃用的 <xmp> 标记吗?
  • 我们可以在内联代码中模仿 SO 的降价处理器的转义标签吗?
  • (metaSO,我承认) SO 的 md 处理器如何在内联代码中转义标签?
  • 我们可以在 HTML 中嵌入的 markdown 代码块中转义 < 吗?

目标:一个逃逸的类<,允许该类包含文本<html>、<body>、<head>、<script>、<style>、<body>,以及任何其他不属于< body> 或经过特殊处理,无需特殊处理。

<xmp> 实现了这一点(实际上继续 - 已弃用但仍受浏览器支持):<xmp><body></xmp>就像&lt;body&gt;. SO 的降价处理器在内联代码中实现了这一点:显示<body>只需写 `<body>`(它本身就是 \`<body>\` 并且不能包含在 SO 代码块中……我不是唯一可以使用的人这个 ;)

到目前为止,我的解决方案(全部<替换&lt;为)处理了不太特殊的 HTML 标记(这些在 <body> 内的静态内容标记有名称吗?<div>、<code>、<span> 等),但是“特殊”标签仍然必须以 < 开头 而不是 <

Javascript:
xmps = document.getElementsByClassName('xmp');
for (var i = 0; i < xmps.length; i++) {
    var xmp = xmp.item(i);
    var newhtml = xmp.innerHTML.replace(/\&gt;/g,"\>").replace(/\&lt;/g,"\<");
    xmp.innerHTML = newhtml;
    }

这样我就可以写了<div class="xmp">&lt;body></div>

什么将允许

<div class="xmp"><body></div>?

或者怎么样?

<div class="xmp">
    <body>
    &/div>
</div>

我的项目的细节可能很重要:会有降价,class="xmp"所以我们需要小心 line-initial >。没有用户输入,因此安全性不是(?)问题。我希望有一个不使用 jQuery 的解决方案。

4

1 回答 1

0

您无法xmp使用 JavaScript 创建功能,因为该功能与 HTML 解析有关。当 JavaScript 可以处理该元素时,浏览器已经解析了该元素。

另一方面,我认为没有必要这样做。据我所知,xmp所有浏览器都支持,HTML5 CR 要求保留支持并且新的浏览器也实现它。它还说作者不得使用它,但这并不意味着它xmp不起作用。

于 2013-02-17T08:36:31.583 回答