jQuery:仅在图像存在时插入图像

Posted

技术标签:

【中文标题】jQuery:仅在图像存在时插入图像【英文标题】:jQuery: insert image only if it exists 【发布时间】:2012-12-24 05:53:22 【问题描述】:

我正在使用 jQuery 将图像和文本块插入到我的文档中,但我只想包含实际存在的图像(图像路径是一个变量,img_url,可能会或可能不会引用现有图像)。

这是我的代码的简化版本:

var text = data.html,
    image = '<img class="myimage" src="' + img_url + '" />';

var imageTest = $("<img>");
    imageTest.attr('src', img_url).load(function() 
        alert("image exists");
    ).error(function() 
        alert("image doesn't exist");
        imageTest.remove();
    );

if (imageTest.length) 
    $("#content").html(image + text);   
 else 
    $("#content").html(text);

虽然我确实根据图像是否存在得到了正确的警报,但imageTest.length 总是评估为1,所以我仍然最终将图像始终插入#content,即使它已损坏。

我哪里错了? imageTest.remove()如果加载失败应该删除图片元素,所以它的长度应该是0,不是吗?

【问题讨论】:

“现有图像”?需要定义。我可以想到两种解释。 【参考方案1】:

你可以这样做

var imageTest = $("<img>");
imageTest.attr('src', img_url).load(function() 
     alert("image exists");
     $("#content").html(image + text); // <-- move it here - if loaded successfully add it
).error(function() 
     alert("image doesn't exist");
     imageTest.remove(); // <-- don't need this since it's not even in the dom
     $("#content").html(text); // <-- move it here - if failed then just add text
);

虽然我注意到你可能会得到 [Object object].. 你可以使用 append 代替,否则你必须将 object 转换为 String

var text = "test text";
var imageTest = $("<img>");
imageTest.attr('src', 'http://dummyimage.com/300').load(function () 
  alert("image exists");
  $("#content").empty().append(imageTest).append(text); // <-- move it here - if loaded successfully add it
).error(function () 
  alert("image doesn't exist");
  imageTest.remove(); // <-- don't need this since it's not even in the dom
  $("#content").html(text); // <-- move it here - if failed then just add text
);

FIDDLE

或将其转换为字符串

var text = "test text";
var imageTest = $("<img>");
imageTest.attr('src', 'http://dummyimage.com/300').load(function () 
  alert("image exists");
  var img = $('<div/>').append(imageTest.clone()).html(); // get it as a String
  $("#content").html(img + text); // <-- move it here - if loaded successfully add it
).error(function () 
  alert("image doesn't exist");
  imageTest.remove(); // <-- don't need this since it's not even in the dom
  $("#content").html(text); // <-- move it here - if failed then just add text
);

FIDDLE

【讨论】:

【参考方案2】:

根据jquery doumentation,.remove() 只是将匹配的元素从dom中移除,但对象本身仍然存在。你可以重新附加它

$('#example').append(imageTest);

你必须重置 imageTest

imageTest = [];

【讨论】:

【参考方案3】:

它始终存在的原因是,如果图像不驻留在服务器上,它将返回 404,而实际上 404 确实存在。 JQuery 无法检测到服务器端的东西。您应该使用 php 或您使用的任何服务器端语言来检测它是否存在。

【讨论】:

以上是关于jQuery:仅在图像存在时插入图像的主要内容,如果未能解决你的问题,请参考以下文章

仅在 Chrome 中使用背景固定图像和 jquery.Animate 的错误

jQuery - contenteditable - 确定插入符号是在图像之前还是之后

仅在第一页页眉上的图像

jQuery uploadify 将图像存储在 mysql 中

jQuery Jcrop 和 PHP 实际上仅在 IE9 中不裁剪图像?

需要帮助使这个简单的 JQuery 图像悬停脚本仅在禁用 javascript 时才弃用为 CSS