2016-04-16 13 views
-1

このコードで何が問題になっていますか?私は状況に応じて別一つずつimgを交換したい...indexOf()を使用しているときにjQuery replaceWith()が正しく機能しない

jQueryの(私は多分それはthis.srcを認識していない、主な問題は、IF条件内にあると思います):

$(document).ready() { 
    $("#firstdiv img").replaceWith(function() { 
     if(this.src.IndexOf("soccer2") > -1) { 
      return $("<img src='/images/soccer ball.jpg'/>") 
     } 
    }) 
} 

HTML :

<div id="firstdiv" class="divvv"> 
    <img src="/images/Soccer.jpg" width="60" height="60" alt="soccer icon" /> 
    <img src="/images/soccer2.jpg" alt="soccer icon" width="60" height="60" /> 
</div> 
+0

単に右投げエラーで指すことになり、ブラウザの開発ツールのコンソールを開きます。 – charlietfl

答えて

1

が含まれています。それは次のようになります。indexOf

$(document).ready(function() { 
 
    $("#firstdiv img").replaceWith(function() { 
 
    if (this.src.indexOf("soccer2") > -1) {    
 
     return $("<img src='/images/soccer ball.jpg' alt='replace one' />"); 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div id="firstdiv" class="divvv"> 
 
    <img src="/images/Soccer.jpg" width="60" height="60" alt="soccer icon" /> 
 
    <img src="/images/soccer2.jpg" alt="soccer icon" width="60" height="60" /> 
 
</div>

3

OPコード内replaceWithデフォルトundefinedによって返され、画像要素がDOMから削除されない場合に条件が満たされた場合にのみ返します。また

IndexOfindexOf小文字i)でなければならないことに注意してください

ここで非作業コードのdemoです。

ただし、条件が偽であれば同じ要素を返すことで問題は解決できますが、

$("#firstdiv img").replaceWith(function() { 
    if(this.src.indexOf("soccer2") > -1) { 
     return $("<img src='/images/soccer ball.jpg'/>") 
    } 

    // else, return the same element 
    return this.outerHTML; 
}); 

より良いアプローチは、属性を使用することですあなたはIndexOfにタイプミスがあり、セレクタ

$('#firstdiv img[src*="soccer2"]').replaceWith('<img src="/images/soccer ball.jpg"/>'); 

Demo

+0

@Tusharこれは良い答えですが、私はこのコードで何が起こっているのか把握しようとしていましたが、indexOfの代わりにIndexOfを書きました... – AlexGH

+0

@AlexGH私もそれを説明した。 :) – Tushar

関連する問題