0

ウィキペディアからいくつかの画像をロードするページがあります。ウィキペディアの画像にはファイル名から計算する必要のあるファイルパスがあり、それを次のファイルに追加する必要がありますhttp://upload.wikimedia.org/wikipedia/commons/thumb/

2つの問題があります。

  1. 少数の写真では、URLの/en/代わりにURLがありますが、いつか/commons/'を知る方法はありません。

  2. 一部のリンクは古く、画像を返さないため、醜いコンテナdivが残ります。

そこで、最初に画像を読み込んで、画像にcommonsエラーが発生するかどうかを確認するコードを記述しました。含まれている場合は、をに置き換えcommonsますen。次に、画像がまだエラーを表示する場合(画像がまったく存在しないことを意味します)、コードはsrc全体を置き換えて''divを非表示にします。

これはすべてFFでうまく機能しますが、Chromeではクラッシュします。無限のjquery.min.js:2 Uncaught RangeError: Maximum call stack size exceededエラーが発生します。誰かが私のコードの問題を教えてくれて、それを修正するのを手伝ってくれるなら、私は本当に感謝しています!

コードは次のとおりです。

$('#imgid').error(function()
{
   $(this).one("error", function() {
         $(this).attr('src','');$(this).parent().parent().parent().hide();
  }).attr('src', $(this).attr('src').replace("/commons/", "/en/"));

});

TIA!

編集:画像を囲むhtmlは次のようになります:

<div data-id="7551400" class="pin">
<div id="sc7551400" class="scrol">
 <a class="PinIm" target="_blank" name="http://upload.wikimedia.org/wikipedia/commons/c/c0/Cage_de_Faraday.jpg" href="">
   <img class="PinImageImg" alt="" src="http://upload.wikimedia.org/wikipedia/commons/thumb/c/c0/Cage_de_Faraday.jpg/155px-Cage_de_Faraday.jpg" style="width:155px" id="img-7551400">
    </a>
       </div>
       </div>
4

2 に答える 2

0

これは、attr('src', $(this).attr('src'...

これを試して:

$('#imgid').error(function()
{
   var src = $(this).attr('src');
   $(this).one("error", function() {
      $(this).attr('src','');
      $(this).parents('.pin').hide();
   }).attr('src', src.replace("/commons/", "/en/"));
});
于 2013-03-05T20:20:23.123 に答える
0

src を置き換えようとして、Chrome を無限ループに入れているようです。私は次のようなことを提案します:

$('img').error(function()
{  
    if(this.errorCount == undefined) this.errorCount = 0;
    if(this.errorCount < 1){
        var newSource = $(this).attr('src').replace("/en/", "/commons/");
        $(this).attr('src', newSource);
     }
    if(this.errorCount == 1){
        $(this).parents('div').hide();
    }

    this.errorCount++;
});

これによりエラーカウントが 0 に設定され、1 回目以降は div が非表示になります。必要に応じて、これを使用していくつかのオプションを実行できます。

これは、コモンをコモンに変更したフィドルであるため、2 回エラーが発生し、2 回目は div が非表示になります: http://jsfiddle.net/davidstetler/uvKvC/

于 2013-03-05T21:14:16.127 に答える