0

HTMLでは、以下のようにコードタグを使用しています。また、以下に示すようにCSSを使用しています:-

<style type="text/css">
    code { white-space: pre; }
</style>


<code>
    public static ArrayList<File> getFiles(File[] files){
        ArrayList<File> _files = new ArrayList<File>();    
        for (int i=0; i<files.length; i++)
            if (files[i].isDirectory())
                _files.addAll(getFiles(new File(files[i].toString()).listFiles()));
            else 
                _files.add(files[i]);
        return _files;
    } 

    public static File[] getAllFiles(File[] files) {
        ArrayList<File> fs = getFiles(files);
        return (File[]) fs.toArray(new File[fs.size()]); 
    }
</code>

上記のようにコードタグを使用すると、HTMLページを表示するとコードの一部が欠落します。上記の HTML ページを表示すると、出力は次のようになります。

public static ArrayList getFiles(File[] files){
        ArrayList _files = new ArrayList();    
        for (int i=0; i fs = getFiles(files);
        return (File[]) fs.toArray(new File[fs.size()]); 
    }

最初の方法では一部が欠落しており、2 番目の方法ではまったく表示されません。問題は何ですか?それを修正する方法は?

4

2 に答える 2

-1

Alien 氏によって既に特定されているように、<code>ブロック内にマークアップとして解釈される文字があります。

多くの文字をエスケープする代わりに、コードに string が含まれていない場合は、次のように要素</scriptの解析および (非) 実行動作を利用できます。<script>

<code>
    <script type="text/x-code">
    public static ArrayList<File> getFiles(File[] files){
        ArrayList<File> _files = new ArrayList<File>();    
        for (int i=0; i<files.length; i++)
            if (files[i].isDirectory())
                _files.addAll(getFiles(new File(files[i].toString()).listFiles()));
            else 
        _files.add(files[i]);
        return _files;
    } 

    public static File[] getAllFiles(File[] files) {
        ArrayList<File> fs = getFiles(files);
        return (File[]) fs.toArray(new File[fs.size()]); 
    }
    </script>
</code>

このCSSで:

script[type=text\/x-code] { 
  display: block; 
  white-space: pre; 
  line-height: 20px; 
  margin-top: -20px;
}

JSfiddle を参照してください: http://jsfiddle.net/fZuPm/3/


更新: コメントの中で、RoToRa はこのアプローチの「正しさ」についていくつかの興味深い点を挙げており、RoToRa に感謝しています。

type 属性を使用して script タグのコンテンツが JavaScript として実行されないようにすることは、十分に理解されている手法です。スクリプトを実行させる型名のリストはブラウザごとに異なりますが、実行を引き起こさないものを見つける難しいことではありません。

もっと興味深いのは、セマンティクスの問題です。script 要素のセマンティクスは、div 要素や span 要素のように本質的に不活性であるというのが私の見解ですが、RoToRa の見解は、それがコンテンツのセマンティクスに影響を与えるというものです。スペックを見ると、なかなか解決しません。HTML 4.01 では、スクリプト要素のセマンティクスについてはほとんど説明されておらず、その機能のみに集中しています。

HTML5 仕様はそれほど優れているわけではありませんが、「この要素はユーザーのコンテンツを表していません」と述べています。私はそれをどうすればいいのかわかりません。要素が何をしないかを言うことはあまり役に立ちません。そのコンテンツがユーザーから意味的に「隠されている」ことを意味する場合、そのコンテンツが含まれているコード要素のコンテンツの意味的に一部ではない場合、この手法は使用しないでください。

ただし、スクリプト要素によって新しいセマンティクスが導入されないことを意味する場合、問題はないようです。

RoToRa が示唆するように、script 要素が意味的にスクリプトを含む必要があるという証拠を見つけることができず、それを推測するのは常識と考えられるかもしれませんが、それは HTML セマンティクスの仕組みではありません。

多くの点で、このアプローチは実際には、ブラウザで XMP 要素が行うことを有効に行う方法を見つけようとするものですが、有効ではありません。XMP は HTML5 でほぼ有効になりましたが、見逃されました。編集者はそれを難し​​い決断だと説明しました。このように script 要素を使用すると、その要件は満たされますが、それでも議論の余地があるようです。適用されていると感じるセマンティクスがこのアプローチであることに不快感を覚える場合は、使用しないことをお勧めします。

于 2013-05-17T12:49:04.703 に答える