12

コードブロックのフォーマット、特にタグ内にタグjQueryを追加するために使用しようとしています。<pre><code>

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

Firefoxはフォーマットを正しく適用しますが、IEはコードブロック全体を1行に配置します。アラートを追加した場合

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

IEがpreタグに追加のテキストを挿入したことがわかります。

<PRE jQuery1218834632572="null">

ページをリロードすると、jQueryに続く番号が変わります。

wrap()の代わりにを使用してタグの外側wrapInner()をラップすると、IEとFirefoxの両方が正しく処理します。しかし、内部でも機能するべきではありませんか?<pre><code><pre> <code>

wrapInner()タグにCSSクラスを追加して<pre>すべてのフォーマットを処理できるため、使用したいのですが、を使用する場合wrap()は、ページフォーマットCSSを<pre>タグに、テキスト/フォントフォーマットを<code>タグに、またはFirefoxとIEを配置する必要があります。両方が窒息します。大したことではありませんが、できるだけシンプルにしたいと思います。

他の誰かがこれに遭遇しましたか?私は何かが足りないのですか?

4

5 に答える 5

12

これがブロック要素とインライン要素の違いです。preブロックレベルの要素です。インラインコンテンツのみを含めることができるcodeタグ内に配置することは違法です。

ブラウザは実際のWebで見つけた恐ろしいタグのスープをサポートする必要があるため、Firefoxはあなたが言っていることを実行しようとします。IEはたまたまそれを別の方法で処理しますが、これは仕様では問題ありません。その場合の動作は、発生してはならないため、指定されていません。

于 2008-08-16T04:04:09.713 に答える
3

ところで、それが関連しているかどうかはわかりませんが、コードタグ内のpreタグは厳密モードでは検証されません。

于 2008-08-15T21:56:18.817 に答える
1

最新のjQueryを使用していますか?試してみるとどうなりますか

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

それはもっと良いですか、それとも同じ結果が得られますか?

于 2008-08-15T21:50:14.897 に答える
1

markpascが述べたように、CODE要素内のPRE要素はHTMLでは許可されていません。最善の解決策は、コードブロックのHTMLで直接<pre> <code>(コードを含む事前にフォーマットされたブロックを意味する)を使用するようにHTMLコードを変更することです。

于 2008-08-18T12:13:36.557 に答える
1

html() を使用してラップできます。

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

上記のように、html を変更したほうがよいでしょう。しかし、この解決策はうまくいくはずです。

于 2011-08-18T14:21:51.453 に答える