我试图使用 jQuery 格式化码块,具体地说,添加一个 <pre> 标签内 <code> 标签:

$(document).ready(function() {
   $("code").wrapInner("<pre></pre>");
});

Firefox适用的格式正确,但即把整个码的框在线之一。如果我添加一个警告

alert($("code").html());

我看到的,即插入一些额外的文本预先标记:

<PRE jQuery1218834632572="null">

如果我重新载入页面,数量下jQuery的变化。

如果我用 wrap() 而不是的 wrapInner(), ,包裹 <pre><code> 标记,两个即和Firefox处理是正确的。但是不应该 <pre> 工作 内部 <code> 为好?

我更愿意使用 wrapInner() 因为我可以再添加一个CSS类的 <pre> 标记,以处理所有的格式,但是,如果我使用 wrap(), 我必须把页面格式CSS在 <pre> 标签和文/字体中的格式 <code> 标签,或者火狐,即两呛。不是一个巨大的处理,但是我想让它尽可能简单。

有其他人遇到这个吗?我失去了一些东西?

有帮助吗?

解决方案

这是之间的差异 方框和内联 元素。 pre 是一块水平的元素.这是不合法的,把它放在 code 标签,该标签 只能含有内嵌的内容.

因为浏览器必须支持任何godawful标签的汤他们可能会找到真正的网络,火狐尝试做什么,你的意思。即发生的处理方式,这是很好的规格;行为在这种情况下是不确定的,因为它永远不应该发生。

  • 你能来代替 替换code 元素 pre?(因为该框/内联的问题,从技术上讲,应当仅作如果元素都在里面 一个元件"流动"的内容, 但浏览器可能会做你想要什么无论如何。)
  • 为什么是这个 code 元件的放在第一位,如果你想要的 pre's行为?
  • 你也可以得到的 code 元素 pre's的空白保留权力的CSS white-space: pre, 但显然 即6唯一荣誉,在严格的模式.

其他提示

顺便说一句我不知道它是相关的,但预先标签内部编码标签不会验证在严格的模式。

您使用的是最新的jQuery?如果你试图

$("code").wrapInner(document.createElement("pre"));

它是任何更好或者你得到同样的结果?

作为markpasc指出,预元件的内部编码件不允许在HTML。最好的解决办法是改变你HTML代码用 <pre><code> (这意味着一个预先格式化的方框,其中包含码)直接在你HTML码块。

你可以使用html()包装:

$('code').each(function(i,e)
{
    var self = $(e);
    self.html('<pre>' + self.html() + '</pre>');
});

如上所述,你会更好改变你html。但这种解决方案应工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top