1

divの背景画像が読み込まれているかどうかを確認するコードを見てきました。彼らが行っているのは、メモリにimgタグを追加することですが、それを変数に格納し、それを使用して、画像がloadイベントでロードされるかどうかを確認します。私の質問は、$ imgタグがメモリに残っているかどうか、およびloadイベントが呼び出されたときにそのタグを削除するにはどうすればよいかということです。

  var $div = $('div'),
  bg = $div.css('background-image');
  if (bg) {
    var src = bg.replace(/(^url\()|(\)$|[\"\'])/g, ''),
      $img = $('<img>').attr('src', src).on('load', function() {
        // do something, maybe:
        $div.fadeIn();
      });
  }
});

私はこの投稿から上記のコードを取得しました

4

2 に答える 2

2

remove()を使用して要素を削除できます。あなたの場合、新しく作成された<img>要素は$img変数にキャッシュされます。したがって、削除する場合は、次のようにします。

$img.remove();

変数をメモリから解放するには、次を使用できます。

delete $img;

変数スコープがグローバルでない場合は、javascriptガベージコレクターが自動的に処理するため、これは実際には必要ありません。

また、 load()は非推奨であり、ブラウザー間で信頼性が低いため、使用しないことをお勧めします。jQueryドキュメントから:

画像で使用する場合のロードイベントの警告

開発者が.load()ショートカットを使用して解決しようとする一般的な課題は、画像(または画像のコレクション)が完全に読み込まれたときに関数を実行することです。これには、注意すべきいくつかの既知の警告があります。これらは:

•クロスブラウザが一貫して、または確実
に機能しない•画像のsrcが以前と同じsrcに設定されている場合、WebKitで正しく起動しない•
DOMツリーが正しくバブルアップしない•次の場合に
起動を停止する可能性があるブラウザのキャッシュにすでに存在する画像

ロードの代替手段の1つは、このプラグインです。

于 2012-10-15T22:25:17.507 に答える
0

それ以外の場合は、ガベージコレクターに残します

$img変数nullを設定するだけです。

$img=null;

誰かのコメントで述べられているように、実際$img.remove();にはそれを行いません。また、javascriptガベージコレクターがあなたに代わってそれを行い、キーワードdeleteなしで変数を宣言した場合にのみ機能するため、心配する必要はありません。varこの場合$img=null、変数を空のnullオブジェクトにします。

nullを使用した例と.remove()を使用した例。

于 2012-10-15T22:53:37.033 に答える