使用indexOf()时jQuery replaceWith()无法正常工作

时间:2016-04-16 14:44:56

标签: jquery html css

这段代码有什么问题?我想根据条件将一个 var cafe = "cafenew" 替换为另一个......

jQuery(我认为主要问题是在if条件中,也许它不能识别img):

this.src

HTML:

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

2 个答案:

答案 0 :(得分:3)

OP代码中的replaceWith仅在满足条件时返回,否则默认情况下将返回undefined,并且将从DOM中删除图像元素。

另请注意,IndexOf应为indexOf小写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;
});

更好的方法是使用属性包含选择器

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

Demo

答案 1 :(得分:1)

IndexOf中有拼写错误。它应该是:indexOf

&#13;
&#13;
$(document).ready(function() {
  $("#firstdiv img").replaceWith(function () {
    if (this.src.indexOf("soccer2") > -1) {            
      return $("<img src='/images/soccer ball.jpg' alt='replace one' />");
    }
  });
});
&#13;
<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>
&#13;
&#13;
&#13;