0

次のスクリプトは、リンクの切り捨てとアイコン クラスの追加の両方にうまく機能しますが、 遅すぎまし た。

私はそれを削除しましたが、機能しますが、最後の要素では機能しません

<script>

         jQuery.noConflict();

         jQuery(".resultAction").each(function(){ 

    var fileName =  jQuery(this).find('a').html()
    var fileExtension = fileName.substring(fileName.lastIndexOf('.') );
    var nameChars= fileName.length;
    var shorter=fileName.substring(0,10)+"...";
           //apply style to relative to file extension
        if(fileExtension=="jpg"||"pdf"||"mov"){
        jQuery(this).find("#indicator").addClass("is" + fileExtension.slice(1) );
        }
           //no file extension hide the icon div "indicator"
        if((fileExtension.indexOf('.') == -1)){
        jQuery(this).find("#indicator").addClass("not");
        }
            //truncate text
        if(nameChars>10){
            jQuery(this).find('a').text(shorter);
        }
         });


    </script>

だから私は上記の .ready を取り除き、これをもう一度追加しました:

<script>
jQuery(document).ready(function(){
jQuery.noConflict();
jQuery(".resultAction:last").each(function(){ 
//-SAME CODE ABOVE-....
</script>

- :last に注意してください - もちろん機能します - しかし、それは冗長であり、このコードを(ページが各要素をロードするときに)即座に実行し、2つの同一のスクリプトを実行する代わりに完全 に実行するためのより効率的な方法があるかどうか疑問に思っていました。高速に実行され、見逃した最後のアイテムに適用されます。

4

1 に答える 1

1

共通コードを関数に入れ、それを使用する両方の場所から呼び出すことができるため、コードのコピーは 1 つだけですが、複数の場所から呼び出すことができます。

jQuery(".resultAction:last").each(processResult);

jQuery(".resultAction").each(processResult);

高速化jQuery(".resultAction:last")に関しては、いくつかのオプションがあります。

  1. 最後の 1 つに ID を与え、ID を使用して直接取得します。
  2. domReady で実行する代わりに、 の最後にある script タグから実行し<body>ます。これは domReady よりも少し早く実行され、同じくらい安全です。
  3. 一度だけクエリを実行し、jQuery(".resultAction")その結果を保存します。その後、DOM ルックアップを行わなくても、リスト全体または最後のリストをいつでも使用できます。
  4. 速度が本当に問題である場合、多くの場合、jQuery は最速の方法ではありません (ただし、通常、速度の違いは認識されません)。たとえば、document.getElementById("item")は よりも 10 倍以上高速ですjQuery("#item")

また、このコードにはおそらく何か問題があります。

jQuery(this).find("#indicator")

ドキュメント全体で ID を1 つだけにする必要があるため、ID をコンテキスト#indicatorに限定する必要はありません。thisその$("#indicator")ため、そのような 1 つのオブジェクトを取得するために使用するか、ページにこのようなオブジェクトが複数あるため、ID の代わりにクラスを使用する必要があります。

于 2012-09-12T18:40:56.100 に答える